在渲染页面之前,我必须向 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 等库之前,我会使用两个标准。
- 函数数量 - 这有点主观,但有多少函数会让您感到沮丧?您目前有 3 个,如果您可能坚持使用 3 个,那么另一个库可能不值得这么复杂。再次强调,这是主观的,完全是我的意见。
- 依赖性 - 如果每个方法都建立在前一个方法的结果之上,那么它们就无法并行运行。但是,在您的情况下,三个数据库查询是独立的,只有 res.render 调用依赖于链式函数。在这方面,您的用例是 async.parallel 的良好候选者。
希望这可以帮助您做出决定
关于node.js - 通过node.js对Mongodb进行完全异步请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17235279/