推送和猫鼬结果的问题

时间:2013-01-07 17:11:35

标签: javascript node.js mongoose

这是代码:

usermodel.findOne({ user: req.session.user }, function (err, usr){

 following = [];

 for (var i = 0; i < usr.follow.length; i++) {

    usermodel.findOne({ _id: usr.follow[i] }, function (err, followed){

        if (err) throw err;

        following.push(followed);

    });

  }

    if (err) throw err;

    console.log(following);

      res.render('home.ejs', {

         user: usr,
         following: following 

      }); 

});

我正在尝试将所有usermodel.find推送到数组中。在循环for内,如果我使用console.log(following),控制台会向我显示包含所有mongoose find结果的数组,但问题是,在for循环之外,数组following是空的!这很奇怪,我不知道该怎么做。对此有任何解决方案......?

谢谢你的进步!

1 个答案:

答案 0 :(得分:0)

问题是您正在调用异步函数,这些函数将来会在某个时间执行,但您希望following包含当前的项目。

您的申请应该像这样重组:

usermodel.findOne({ user: req.session.user }, function (err, usr){
following = [];
// i assume that usr.follow is an array
usermodel.find({ _id: { $in: usr.follow } }, function (err, userList){
    if (err) throw err;
    console.log(userList);
    res.render('home.ejs', {
        user: usr,
        following: userList
    });
});