我有一个ID数组,我需要在一个名为Users(集合和模型存在)的集合中查找那些ID,以获取有关具有该ID的用户的信息。
var emails = _.map(toSendEmails,function(id){
var userEmail = User.findById(id, function(err, user) {
return user.email;
});
return userEmail;
});
变量toSendEmails是一个ID数组。
实际情况是map函数在User.findById返回任何值之前执行
我应该如何进行?
谢谢!
答案 0 :(得分:2)
您可以从_.map
函数返回一组诺言,并等待所有这些诺言得到解析以获取电子邮件列表。
var ePromises = _.map(toSendEmails,function(id){
return User.findById(id).then(function (user) {
return user.email;
});
});
Promise.all(ePromises).then( function (emails){
// do something with the emails
});
答案 1 :(得分:1)
虽然肯定会很快有人告诉您使用Promise.all,但最简单的方法是仅使用npm中的(async)[https://www.npmjs.com/package/async]]库,它具有与map函数相同的功能lodash为您处理回叫流程。
答案 2 :(得分:0)
您可以使用 async / await 进行尝试。
var emails = _.map(toSendEmails, async function(id){
var user = await User.findById(id);
return user.email
});