3 回答
TA贡献1876条经验 获得超6个赞
您错过了应用于一系列承诺的承诺模式的要点。
Exec将返回一个仅针对数据数组的一个元素进行解析的承诺。因此,您将对数组中的每个数据都有一个承诺,并且您的代码必须等待所有承诺都得到解决。请记住,这将导致数组中的每个数据执行一次 Mongo 查询。
最好的方法是将数据数组映射到 Promise 数组,并用于Promise.all等待所有 Promise 解析:
// get an array of promises for each data to query:
let promises = array.map(data => {
return userDetailsModel
.find({UpdateStatusDate:data})
.countDocuments()
.exec();
});
// when all the promises fulfill
Promise.all(promises).then(counts => {
console.log(counts);
// for each counts log the result:
counts.forEach(result => { console.log(result); });
});
TA贡献1852条经验 获得超7个赞
您可以使用Promise.all()方法在所有承诺之后等待
let count = [];
const promiseArray = array.map((data) => (
new Promise((resolve) => {
userDetailsModel.find({ UpdateStatusDate: data })
.countDocuments()
.exec((err, data) => { resolve(data) })
})
))
Promise.all(promiseArray).then((values) => {
count = values;
console.log(count);
});
TA贡献1829条经验 获得超13个赞
确保你的函数async前面有关键字,你就可以开始了
let count = await Promise.all(
array.map(data =>
userDetailsModel
.find({ UpdateStatusDate: data })
.countDocuments()
.exec()
)
);
consle.log(count);
添加回答
举报