2

在渲染页面之前,我必须向 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
      });
    });
  });
});

我确实认为这种方法会扼杀异步的想法。但是,只有在处理完所有请求后,我才需要调用 res.render。如何异步启动它?我应该按照这里的建议使用异步库:nodejs 中的多个异步 mongo 请求还是有更合适的解决方案?谢谢。

4

1 回答 1

0

我确实认为这种方法会扼杀异步的想法

不,他们没有。这正是异步 I/O 应该如何工作的。但是,我确实对链接多个异步调用感到痛苦。在不知不觉中,您可以拥有 6 或 7 个嵌套的匿名异步函数。

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

  1. 功能数量- 这有点主观,但有多少看起来让你感到沮丧?您目前有 3 个,如果您可能坚持使用 3 个,那么另一个库可能不值得这么复杂。同样,这是主观的,完全是我的观点。
  2. 依赖关系——如果每个方法都建立在前一个方法的结果之上,那么它们就不能并行运行。但是,在您的情况下,三个数据库查询是独立的,只有 res.render 调用取决于链式函数。在这方面,您的用例是 async.parallel 的一个很好的候选者。

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

于 2013-06-21T12:38:19.347 回答