当它应该为真时,异步系列以假响应

Posted

技术标签:

【中文标题】当它应该为真时,异步系列以假响应【英文标题】:Async series responds with false, when it should be true 【发布时间】:2013-07-21 15:38:57 【问题描述】:

嘿,所以我正在使用异步系列来创建一个数组,其中包含在搜索结果中找到的用户以循环查看它们是否是登录用户的好友请求数组的一部分。但是,由于某种原因,它是总是以 false 结尾,有人注意到下面的代码有什么问题吗?

这是路由文件的代码:

exports.searchPost = function(req, res, err) 
    User.find($or:[
            firstName: req.body.firstName,
            lastName: req.body.lastName,
            email: req.body.email,
            phone: req.body.phone]
    , function(err, users, userAdd) 
        if(err) 

            return res.render('searchError', title: 'Weblio'); 
         else 

            if(req.body.firstName=== '' && req.body.lastName==='' && req.body.email==='' && req.body.phone=== '') 
                //maybe  a diff page saying that is not a valid search page
                return res.render('searchError', title: 'Weblio');        
             else 


                    var userAdd,
                    series = [];

                    console.log('addman');
                    users.forEach(function (user) 
                        series.push(function (callback) 
                            User.findById(req.signedCookies.userid, 
                                friendRequest: user._id
                            , function () 
                                if (user._id === true) 
                                console.log('addman1');
                                return callback(null, [user, true]);
                                 else 
                                    console.log('addman2');
                                    console.log(user._id);
                                    return callback(null, [user, false]);
                                
                            );
                        );
                    );

                async.series(series, function (err, results) 
                //results should be an in order array of values;
                console.log(results);
            return res.render('searchResults', title: 'Weblio',         
                    userAdded: results
                );
            ); 

            

        
    );

;  

【问题讨论】:

顺便说一句,您可以将forEach() / push() 替换为map() 它会改变错误的输出吗,由于某种原因,我一直在出错 【参考方案1】:

我认为您可以查看if (user._id === true) 的几个问题。

第一个问题是您期望 user._id 是一个布尔值 - 它可能不是。一个简单的if (user._id) 将检查它是否是一个“truthy”值 - 除了 0 之外的所有数字都是。

但是,我认为那里可能存在第二个问题:user 变量来自您的users.forEach(function (user) - 我猜您实际上想要检查您的User.findById(req.signedCookies.userid, friendRequest: user._id function(... 代码的结果。在这种情况下,您需要将 error, user2 参数添加到回调函数或类似的东西。

【讨论】:

user2 喜欢这个 User.findById(req.signedCookies.userid, friendRequest: user._id , function (user2) 或者你是指将回调函数中的用户替换为user2? 就像你说的,function(user2) 然后if (user2._id) ... getting TypeError cannot read property '_id' of null for that line of if (user2._id) if 语句之前,调用console.dir(arguments) - 这应该告诉你你正在使用什么。我认为第一个参数实际上是错误的,第二个是数据。很抱歉,我会编辑我的答案。 好的我明白了,这是正确的,但是第二个参数是什么,我如何调用我查询的数据?

以上是关于当它应该为真时,异步系列以假响应的主要内容,如果未能解决你的问题,请参考以下文章

AVX 内在 _mm256_cmp_ps 是不是应该在为真时返回 NaN?

当其他可观察对象为真时,从可观察对象中获取项目

Hystrix 后备禁用

NodeJs:获取分页获取请求

当属性和数据值为真时 WPF 触发

当水平为真时,百分比不适用于 FlatList 渲染项