NodeJS数组推送不起作用

时间:2015-07-06 00:02:51

标签: node.js mongodb

我正在做非常简单的请求从MongoDB获取一些数据,然后将它们发送到我的视图

router.get('/', isAuthenticated, function(req, res) {
    Conversation.findAllConversation(req.user._id, function(err, data) {
        if (err) return console.error(err); // handle this

        var array = [];

        data.forEach(function (element, index, array){
            ConversationReply.findLastReply(element._id, function(err, replys) {
                if(err) return cosole.log(err);
                console.log(replys);
                array.push(replys);
            });
        });

        console.log(array);

        res.render('messages/index', {
          title : 'Messages', 
          conversations: data,
          user: req.user, 
          lastReplys: array });
   });
});

但是来自回复的所有数据都没有推送到我的阵列然后只是发送空。 Console.log(回复)正确显示我的所有回复。

1 个答案:

答案 0 :(得分:1)

findLastReply异步返回,而请求函数正在同步进行。要解决这个问题,我会做这样的事情:

router.get('/', isAuthenticated, function(req, res) {
    Conversation.findAllConversation(req.user._id, function(err, data) {
        if (err) return console.error(err); // handle this

        var array = [];

        data.forEach(function (element, index, array){
            ConversationReply.findLastReply(element._id, function(err, replys) {
                if(err) return cosole.log(err);
                console.log(replys);
                array.push(replys);

                if (array.length === data.length) {
                  // we are done! :D
                  console.log(array);

                  res.render('messages/index', {
                    title : 'Messages', 
                    conversations: data,
                    user: req.user, 
                    lastReplys: array });
                }
            });
        });
   });
});

更好的是使用Promises,但这不是必需的。