在给定的代码中,尝试在循环内从多个 MongoDB 查询检索数据并组装结果到单个数据数组中。但是,当尝试返回此数据作为响应时,会出现问题。
问题源于 MongoDB 查询的异步特性。当执行查询时,该函数不会立即返回结果,而是启动任务并立即返回。这就是为什么用于存储聚合结果的 FinalData 以未定义形式返回:该函数在查询完成并收集数据之前退出。
要解决此问题,我们需要利用 Promise,它通过提供处理异步任务流的结构化方法来促进异步编程。 Promise 允许我们定义一个在异步任务完成时执行的函数。
实现 Promise:
考虑到这些概念,修改后的 getPrayerInCat 函数如下:
function getPrayerInCat(data) { var promises = data.map(function(data2) { var id = data2.id; return find({ prayerCat: id }) .then(function(prayer) { if (!prayer) data2.prayersCount = 0; else data2.prayersCount = prayer.length; return data2; }); }); return Q.all(promises); }
以上是如何在 MongoDB 中处理循环内的异步数据检索?的详细内容。更多信息请关注PHP中文网其他相关文章!