如果您使用支持Promise的Node.js 4+,则可以将查询包装在承诺中。
queryPromise = function(findQueryCursor) {
return new Promise(function(resolve, reject) {
findQueryCursor.toArray(function(err, data) {
resolve(data);
});
});
};
然后,创建包括查询的承诺的数组:
promiseAr = [];
promiseAr.push(
queryPromise(
db.collection('dbname').find(query1)
)
);
promiseAr.push(
queryPromise(
db.collection('dbname').find(query2)
)
);
然后调用
Promise.all(promiseAr)
.then(function(dataArray) {
// results of query1 in dataArray[0]
// results of query2 in dataArray[1]
})
.catch(function(err) {
// catch errors
});
的查询将被并行地发送到MongoDB的,而 “然后”函数将在所有查询完成后调用。
您必须这样做的原因是因为.find()函数返回一个游标,然后您必须调用.toArray()来检索数据。 .toArray()本身是异步的,所以如果你想使用Promise.all,你必须把它包装在Promise中。
你想让这些函数异步执行或者像你的示例代码一样执行吗? –