javascript - 等到 forEach 从 db 获取数据
问题描述
我正在尝试实现一个 forEach 来从 mongo 数据库中获取数据并将每个数据推送到一个数组中。在推送所有数据后,我需要控制台记录该数组。我尝试了一个承诺,但没有得到想要的结果。这就是我所拥有的
count=[];
array.forEach((data)=>{
userDetailsModel.find({UpdateStatusDate:data}).countDocuments()
.exec((err,data)=>{count.push(data)})
})
谢谢你的帮助!
解决方案
您错过了应用于一系列承诺的承诺模式的要点。
Exec
将返回一个只为数据数组的一个元素解析的承诺。因此,您将对数组中的每个数据都有一个承诺,并且您的代码必须等待所有承诺解决。请记住,这将导致数组中的每个数据都有一个 Mongo 查询。
最好的方法是将你的数据数组映射到一个 promise 数组,然后Promise.all
等待它们全部解决:
// 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); });
});
推荐阅读
- javascript - vue 在复选框更改时将数据发送到服务器
- flutter - 不同文件时出现抖动错误
- macos - “qmake”无法打开,因为无法验证开发者
- mysql - waitfor 命令在 SQL 延迟时不起作用
- c# - IronPython 中的所有类成员
- python - 为什么您无法打印某些迭代器,例如 zip 或 map?
- python - 雷达2“pd”与“pda”
- c# - 从 .NET (C#) 中的 XML 文档中读取数据
- ios - 使用 react-native-track-player 在 iOS 中通过远程 url 播放 .m4a
- ios - 二元运算符“==”不能应用于“[AnyHashable:Any]?”类型的操作数 和“字符串”