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次の配列にすべてをプッシュしようとしています。loop の内側でforを使用するconsole.log(following)と、コンソールはすべてのマングース結果を含む配列を表示しますが、問題は、ループのfind外側では配列が空であることです! それは奇妙で、私は何をすべきか正確にはわかりません。これに対する解決策はありますか...?forfollowing

よろしくお願いします!

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 に答える