首页  >  文章  >  web前端  >  如何确保数据库查询在使用 MongoDB 和 Q Promise 循环返回结果之前完成?

如何确保数据库查询在使用 MongoDB 和 Q Promise 循环返回结果之前完成?

DDD
DDD原创
2024-11-10 17:34:03983浏览

How to Ensure Database Queries Finish Before Returning Results in a Loop with MongoDB and Q Promises?

从循环中进行的数据库查询返回检索结果的问题

在此查询中,目标是在一个循环中进行多个 MongoDB 查询循环并将组合结果作为单个数据数组发送。但是,在循环内使用 return 不会等待数据库请求完成,从而导致未定义的响应。即使使用 Q.moulde 也无法解决问题。

修改代码:

var getPrayerInCat = function(data){
    var promises = data.map(function(data2){
        var id = data2.id;
        return Q.nbind(Prayer.find, Prayer)({prayerCat:id})
            .then(function(prayer) {
                if(!prayer) data2.prayersCount = 0;
                else data2.prayersCount = prayer.length;
                return data2;
            })
    });
    return Q.all(promises);
}

说明:

  1. Q.nbind:这个函数转换将 Prayer.find 方法转换为返回 Q Promise 的函数。
  2. 链式 Promises: 循环中的每次迭代现在都会返回一个使用更新的数据对象解析的 Promise。
  3. Q.all: 该函数将所有的 Promise 组合成一个 Promise,一旦所有的数据对象都被更新,该 Promise 就会解析为一个包含所有更新数据对象的数组。数据库查询已完成。
  4. return Q.all(promises);: 此行确保函数等待所有数据库查询完成并返回组合结果。

以上是如何确保数据库查询在使用 MongoDB 和 Q Promise 循环返回结果之前完成?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn