Sla*_*ppy 4 mongoose mongodb node.js
我对Mongoose很新,所以请耐心等待.
有没有办法在"并行"中执行两个查询.或者至少查询两个文档并将结果一起返回?回调表示法让我在同步时绊倒了一点.
在伪代码中这是我正在寻找的:
function someWork(callback) {
var task1 = service.doQueryAndReturnTask();
var task2 = service.doQueryAndReturnTask();
waitAll(task1, task2);
callback(task1, task2);
}
Run Code Online (Sandbox Code Playgroud)
我知道这不是解决方案,因为需要在doQueryAndReturnTask上进行回调,但我需要一个有效且可引用的模式并不链接回调
Leo*_*tny 12
这不是关于猫鼬.Node.js是一种异步语言,因此它允许您同时执行任意数量的异步任务(例如,查询数据库).
你需要的是一些lib来处理异步控制流,比如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
});
};
Run Code Online (Sandbox Code Playgroud)
when.js是一个处理承诺的模块.所以,如果你不需要承诺,你可以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
});
};
Run Code Online (Sandbox Code Playgroud)
更新: Promises是通过使用promises包装异步函数来处理异步控制流的替代方法.
通常,为了获得某些异步函数的结果,你应该传递一些回调,这将在将来的某个地方执行.
当你使用promises,而不是传递一些回调时,你会立即得到执行结果的承诺,这些结果将在未来的某个地方得到解决.
因此,promises允许您使用promises而不是真实数据以同步方式使用异步函数.Promises还允许您在执行的任何时候等待结果.
在我的例子中,我正在执行两个查询,为他们的结果获得两个承诺.然后我告诉节点等待,直到两个承诺都完成后,将结果传递给callback函数.
你可以promises/A+在这里阅读规范.您也可以查看when.jsapi文档.