以同步方式串联猫鼬查询
我有一个执行三个mongooose命令的函数。 1.查找所有合作伙伴的列表。 2.查找所有用户的列表。 3.更新用户表。以同步方式串联猫鼬查询
问题:Mongoose是异步执行的,它执行其他命令。我如何让它以1,2,3的顺序执行,然后执行其他命令。下面,我附上了一段代码片段。
问题在于它会异步运行三个mongoose命令并调用redirect()。
router.post('/login', function(req, res, next) {
Partner.findOne({'groupName': req.session.user.groupnName}), function(error, data) {
var partnerInfo = data;
if(partnerInfo && req.session.user) {
req.session.user.accountID = partnerInfo.accountID;
req.session.user.iamRole = partnerInfo.iamRole;
}
};
var id;
User.find({'username': req.session.user.username}, function(err, data) {
if(data) {
id = data._id;
}
});
User.findByIdAndUpdate(id, req.session.user, function(error) {});
return res.redirect('/home');
});
您应该将调用嵌套在回调函数中。
func1(args, function(){
// do something here
func2(someMoreArgs, function(){
// do something more here
func3(andMore, function(){
})
})
})
如果你想避免嵌套回调,使用蒙戈 - 客户的承诺接口或猫鼬
哦,请不要。不是飞行的V! –
@NeilLunn即使我会避免嵌套回调。解决方案将使用Promises来代替。 –
那么不要发布这样的糟粕,如果你不会自己做。没有必要在有[优秀资源](https://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-asynchronous-call)解释返回值和传递值与各种可用的方法。肯定更有帮助,那么“嵌套回调”你不觉得吗? (修辞问题 - 所以不要回答,只是想)。 –
阅读上如何使用回调。甚至承诺。猫鼬也支持这一点。 https://docs.nodejitsu.com/articles/getting-started/control-flow/what-are-callbacks/ – Roshan
使用async.waterfall([fn1,fn2,...],cb):https:// www .npmjs.com/package/async-waterfall –