这与猫鼬无关。Node.js 是一种异步语言,因此它允许您同时执行任意数量的异步任务(例如查询数据库)。
您需要一些库来处理异步控制流,例如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,你可以使用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
});
};
更新: Promises 是通过用 Promise 包装异步函数来处理异步控制流的另一种方法。
通常,要获得某个异步函数的结果,您应该向它传递一些回调,该回调将在将来的某个地方执行。
当你使用 Promise 时,而不是传递一些回调,你会立即得到执行结果的 Promise,这些结果将在未来的某个地方得到解决。
因此,promise 允许您使用 promises 而不是真实数据以同步方式使用异步函数。Promises 还允许您在执行的任何时候等待结果。
在我的示例中,我正在执行两个查询,并为其结果获得两个承诺。然后我告诉节点等到两个promise都得到满足后再将它们的结果传递给callback
函数。
您可以在此处阅读promises/A+
规范。您还可以查看when.js
api 文档。