如何在 NodeJS 中同步 MongoDB 异步查询



我在循环体中有一个for-loop语句和一个异步MongoDB。我想做的是从我的MongoDB数据库进行find查询,并将结果推送到数组中。

这是代码:

function() arrResult() {
  var arr = [];
  for(...) {
    collection.find({ foo: i }, function (err, cursor) {
      arr.push(cursor);   
    }    
  }
  return arr;
}

但很明显,该函数的返回值将是一个空数组。

我想使用Q模块来解决这个问题。有什么解决办法吗?

我想使用 Q 模块解决这个问题。有什么解决办法吗?

是的,承诺是一个非常容易处理这个问题的抽象概念。您可以并行执行查询,并使用 all 收集其结果。

特别是,使用Q它看起来像这样:

function arrResult(…) {
    var promises = [];
    for (…)
        promises.push( Q.ninvoke(collection, "find", {foo: i}) );
    return Q.all(promises);
}
arrResult(…).then(function(arr) {
    …
}, function(err) {
    // first error, if any occured
});

您需要一个类似于进程门的同步机制。每个返回的查询都必须到达门口,例如递减一些计数器并存入其结果。当全部到达门口时,最终回调会返回收集到的结果。

相关内容

  • 没有找到相关文章

最新更新