我使用mongoose查询一个集合(消息)。结果是一系列文档。每个文档都包含不同集合(用户)的ID。现在我想从messages集合中查询每个ID的users集合。 我们的想法是使用用户集合中的信息更新每个消息对象,然后再将其返回到前端。 我尝试使用async.each。由于某种原因,即使我确保在每次迭代后调用callback()函数,也不会调用final函数。
app.get('/getmsg', function(req, res){
messages.find({query})
.exec(function(err, ms){
if(err) throw err;
async.each(ms, function(m, callback){
users.findOne({_id : m.userId})
.lean()
.exec(function(err, user){
if(err) {
console.log('error' , err);
callback();
} else {
m.userName = user.name;
// everything is working up to here
callback();
}
}), function(err){
res.send(ms); // this is never returned!
}
});
});
});
有没有更好的方法来实现这一目标?我认为这一定是个常见问题。
谢谢!
答案 0 :(得分:0)
您无法使用res.send。而是创建一个函数来获得有关它的通知。这样的事情。
// 1st para in async.each() is the array of items
async.each(items,
// 2nd param is the function that each item is passed to
function(item, callback){
// Call an asynchronous function, often a save() to DB
item.someAsyncCall(function (){
// Async call is done, alert via callback
callback();
});
},
// 3rd param is the function to call when everything's done
function(err){
// All tasks are done now
doSomethingOnceAllAreDone();
}
);