在Mongoose中做一个并行的“查询”

我对mongoose很新,所以请耐心等待。

有没有办法在“并行”中执行两个查询。 或者至less查询两个文件并将它们的结果一起返回? 这个callback符号使我同步了一点。

在伪代码中,这是我正在寻找的:

function someWork(callback) { var task1 = service.doQueryAndReturnTask(); var task2 = service.doQueryAndReturnTask(); waitAll(task1, task2); callback(task1, task2); } 

我知道这不是解决scheme,由于需要在doQueryAndReturnTaskcallback,但我需要一个模式,工作和可引用不连锁callback

这不关于mongoose。 Node.js是一种asynchronous语言,因此它允许您同时执行任意数量的asynchronous任务(例如,查询数据库)。

你需要的是一些lib来处理asynchronous控制stream,比如async.js或者when.js :

 var when = require('when'); var someWork = function(callback) { when.all([ collection1.find(query1).exec(), collection2.find(query2).exec() ]).spread(callback) .otherwise(function(err) { // something went wrong }); }; 

when.js是处理promise的模块。 所以,如果你不需要promise,你可以使用async.js代替:

 var async = require('async'); var someWork = function(callback) { async.parallel([ function(cb) { collection1.find(query1, cb) }, function(cb) { collection2.find(query2, cb) } ], function(err, res) { if (!err) return callback.apply(null, data); // something went wrong }); }; 

更新: Promise是用承诺包装asynchronous函数来处理asynchronous控制stream的替代方法。

通常,为了获得一些asynchronous函数的结果,你应该传递一些callback,这些callback将在未来的某个地方执行。

当你使用承诺的时候,而不是通过一些callback,你会立即得到执行结果的承诺,这将在未来的某个地方得到解决。

因此,promise允许您使用promises而不是真实数据以同步方式使用asynchronous函数。 承诺也允许您在执行的任何时候等待结果。

在我的例子中,我正在执行两个查询,得到两个结果的承诺。 然后,我告诉节点等待,直到两个promise都满足,然后将结果传递给callback函数。

你可以在这里阅读promises/A+规范 。 你也可以看看when.js api文档 。