我只想在计算数据时才将数据传递给res.view。
代码:
followers: function(res, req, next){
var data = [];
var me = req.session.user;
for(var i = 0; i<me.followers.length; i++){
User.findOneById(me.followers[i], function foundUser(err, user){
if(err) return next(err);
followers.push(user)
console.log(user)
});
}
res.view({
data: data
})
}
问题是res.view在for循环执行之前呈现。我一直在摸索着想办法解决这个问题但是没有运气。请不要向我推荐ajax路线,因为这是我不想使用的东西。
答案 0 :(得分:1)
您的代码中不需要for
循环;它可以在一个查询中完成。然后,当您有结果时,您可以渲染视图:
followers: function(res, req){
var me = req.session.user;
// Use an "in" query to find all users
// whose id is in the array "me.followers"
User.find({id: me.followers}).exec(function (err, users){
// Don't call "next" in your controller--send a response instead
if(err) return res.serverError(err);
// Send the array of users to your view as the "data" var
return res.view({data: users});
});
}
答案 1 :(得分:0)
尝试使用https://github.com/caolan/async中的async.series,只有在for循环执行完成后才能运行res.view。