这是代码:
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
是空的!这很奇怪,我不知道该怎么做。对此有任何解决方案......?
谢谢你的进步!
答案 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
});
});