【问题标题】:How to get Mongoose findById response inside a map function of lodash?如何在 lodash 的地图函数中获取 Mongoose findById 响应?
【发布时间】:2018-12-19 21:05:03
【问题描述】:

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

我应该如何进行?

谢谢!

【问题讨论】:

    标签: javascript node.js mongoose lodash


    【解决方案1】:

    您可以从 _.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
    });
    

    【讨论】:

    • 谢谢! ePromises 是一组我现在可以与 Promises.all 一起使用的 Promise
    【解决方案2】:

    虽然很快就会有人告诉你使用 Promise.all,但对你来说最简单的方法就是使用 npm 的 (async)[https://www.npmjs.com/package/async] 库,它有一个与 lodash 相同的 map 函数为您处理回叫流程。

    【讨论】:

      【解决方案3】:

      您可以使用 async/await 进行尝试。

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

      【讨论】:

      • 你能解释一下吗?
      • 在 mongoose 中 User.findById 将返回 Promise 并通过 await 关键字等待 Promise 解析并返回 map 函数。
      猜你喜欢
      • 2015-02-12
      • 2018-11-09
      • 1970-01-01
      • 2020-01-02
      • 2018-09-16
      • 2018-06-11
      • 1970-01-01
      • 2022-12-09
      • 2017-06-27
      相关资源
      最近更新 更多