通过node.js完成对Mongodb的asynchronous请求

在呈现页面之前,我必须向MongoDB发出几个请求。 这里是我现在怎么做(db.js是我的数据库处理层):

db.findUser(objid, function(result1){ db.findAuthor(objid, function(result2){ db.findSmthElse (objid, function(result3){ res.render('template', { user: result1, author: result2, smthelse: result2 }); }); }); }); 

我认为这样的方法杀死了asynchronous的想法。 不过,只有在处理完所有请求之后,我才需要调用res.render。 如何启动它的asynchronous? 我应该使用asynchronous库,因为这里build议: nodejs中多个asynchronousmongo请求还是有更多合适的解决scheme吗? 谢谢。

我认为这样的方法杀死了asynchronous的想法

不,他们不。 这就是asynchronousI / O应该如何工作。 但是,我确实感到你的链接多个asynchronous调用的痛苦。 在你知道之前,你可以有6或7个嵌套的匿名asynchronous函数。

在考虑使用像async或promise这样的库之前,我会使用两个标准。

  1. function数量 – 这是有点主观的,但有多less看起来令人沮丧? 你现在有3个,如果你可能坚持三个,那么另一个库可能是不值得的复杂性。 再一次,这是主观的,完全是我的看法。
  2. 依赖关系 – 如果每个方法build立在前一个结果上,那么它们不能并行运行。 但是,在你的情况下,三个数据库查询是独立的,只有res.render调用取决于链接的function。 在这方面,你的用例是async.parallel的一个很好的候选者。

我希望这可以帮助你做出决定