node.js - 通过node.js对Mongodb进行完全异步请求

标签 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
      });
    });
  });
});

我确实认为这种方法会扼杀异步的想法。但是,只有在处理完所有请求后,我才需要调用 res.render 。如何异步启动它?我应该按照此处建议的那样使用异步库:multiple async mongo request in nodejs或者还有其他更合适的解决方案吗?谢谢。

最佳答案

I do suppose such methos kills the idea of async

不,他们没有。这正是异步 I/O 的工作原理。但是,我确实感受到您链接多个异步调用的痛苦。在您意识到之前,您可以拥有 6 或 7 个嵌套的匿名异步函数。

在考虑使用 async 或 Promise 等库之前,我会使用两个标准。

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

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

关于node.js - 通过node.js对Mongodb进行完全异步请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17235279/

相关文章:

node.js - 将图像文件直接存储到mongodb

grails - 在Async Promise中批量加载时,Grails DuplicateKeyException/NonUniqueObjectException

c# - 在 .Net 中寻找 'Asynchronous' 字的解释?

javascript - Sequelize app.post : why "TypeError: Cannot read property ' create' of undefined"?

javascript - 如何以及在何处正确连接和结束nodejs中的mongoDB连接

javascript - mongodb不插入完整数组

Javascript:有什么方法可以检测所有异步脚本何时加载?

javascript - 在运行时添加用户密码

mysql - 如何使用 node.js 在 mySQL 中进行批量更新

MongoDB:无法规范化查询:BadValue $not 需要正则表达式或文档