循环中多个数据库查询返回数据的问题
在循环中执行多个数据库查询时,处理异步操作至关重要正确地确保在将数据返回给您的客户端之前检索所有数据。
在提供的代码中, getPrayerInCat 函数使用 forEach 回调执行多个 MongoDB 查询。但是,代码会立即返回 undefined,因为该函数不会等待所有数据库查询的结果完成。
要解决此问题,我们在使用 Promise 时必须遵循以下原则:
使用这些原则,我们可以创建一个 getPrayerCount 函数的版本,该函数返回Promise:
function getPrayerCount(data2) { var id = data2.id; return find({prayerCat:id}) .then(function(prayer) { if (!prayer) data2.prayersCount = 0; else data2.prayersCount = prayer.length; return data2; }); }
要处理多个异步任务并等待它们完成,我们可以使用Q.all:
function getPrayerInCat(data) { var promises = data.map(getPrayerCount); // don't use forEach return Q.all(promises); }
通过从 getPrayerInCat 函数返回一个 Promise,我们可以等待所有查询完成后再返回结果。
以上是如何在 JavaScript 循环中从多个数据库查询返回数据?的详细内容。更多信息请关注PHP中文网其他相关文章!