如何在lodash的地图函数中获取Mongoose的findById响应?

时间:2018-12-19 21:05:03

标签: javascript node.js mongoose lodash

我有一个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返回任何值之前执行

我应该如何进行?

谢谢!

3 个答案:

答案 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
});