我试图遍历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;
}
答案 0 :(得分:2)
有很多可以用于此的promise lib,或者你可以在较新版本的Node上使用本机JS Promise
实现。特别是Promise.all
方法。
Promise.all([ARRAY_OR_PROMISES]).then(values => {
console.log(values); // [ARRAY_OF_RESULTS_FROM_PROMISES]
});
使用Promise.all
和map
可以准确地提供您想要的内容:
//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
,同时运行的promises数量没有限制。如果这是一个问题,您可以自己滚动或使用具有此方法的许多承诺库中的一个。