0

这是代码:

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),控制台会向我显示包含所有猫鼬find结果的数组,但问题是,在for循环之外,数组following是空的!这很奇怪,我不知道该怎么做。任何解决方案...?

谢谢提前!

4

1 回答 1

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
    });
});
于 2013-01-07T17:53:07.627 回答