Как получить ответ Mongoose findById внутри функции карты lodash? - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть массив с идентификаторами, и мне нужно искать эти идентификаторы в коллекции с именем Users (коллекция и модель существует), чтобы получить информацию о пользователе с этим идентификатором.

    var emails = _.map(toSendEmails,function(id){
        var userEmail = User.findById(id, function(err, user) {
            return user.email;
        });

        return userEmail;
    });

Переменная toSendEmailsмассив идентификаторов.

Фактический сценарий состоит в том, что функция map выполняется до того, как User.findById возвращает любое значение

Как мне поступить?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 20 декабря 2018

Вы можете вернуть массив обещаний из функции _.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
});
0 голосов
/ 20 декабря 2018

Вы можете попробовать это, используя async / await .

var emails = _.map(toSendEmails, async function(id){
    var user = await User.findById(id);
    return user.email
});
0 голосов
/ 20 декабря 2018

Хотя кто-то наверняка скоро придет и скажет вам использовать Promise.all, для вас проще всего будет использовать библиотеку (async) [https://www.npmjs.com/package/async] из npm, в ней есть функция map, идентичнаяЛодаш, который обрабатывает обратный поток для вас.

...