【问题标题】:Mongoose : Queries through an array, return a promise of an arrayMongoose:通过数组查询,返回一个数组的promise
【发布时间】:2015-06-30 18:09:35
【问题描述】:

我正在尝试遍历opts 并对每个元素进行相同的查询,我希望返回一个包含查询结果的数组的承诺。我怎样才能做到这一点 ?

我暂时只尝试了第一项

//opts is an array of objects
function getRecapOfCampaign (campaignId, opts) {    
  var p_votes = Models.BSVote
    .find({
      created: {
        $gte: opts[0].fromDate,
        $lt: opts[0].toDate
      }
    })
    .where('campaign').equals(campaignId)
    .count()
    .exec();

  return p_votes;
}

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    有很多 Promise 库可供您使用,或者您可以在较新版本的 Node.js 上使用本机 JS Promise 实现。特别是Promise.all 方法。

    Promise.all([ARRAY_OR_PROMISES]).then(values => {
      console.log(values); // [ARRAY_OF_RESULTS_FROM_PROMISES]
    });
    

    Promise.allmap 一起使用应该可以满足您的需求:

    //opts is an array of objects
    function getRecapOfCampaign(campaignId, opts) {
      return Promise.all(opts.map(function(opt) {
        return Models.BSVote.find({
            created: {
              $gte: opt.fromDate,
              $lt: opt.toDate
            }
          })
          .where('campaign').equals(campaignId)
          .count()
          .exec();
      }));
    }
    

    注意:Promise.all 对同时运行的 Promise 数量没有限制。如果这是一个问题,您可以自行开发或使用具有此方法的众多 Promise 库之一。

    【讨论】:

      猜你喜欢
      • 2014-10-21
      • 2018-06-12
      • 2019-11-30
      • 2017-11-13
      • 2017-10-21
      • 2019-04-27
      • 1970-01-01
      • 2017-08-15
      相关资源
      最近更新 更多