在Node.js中并行调用函数
我需要在Node.js中做一些独立的数据库查询。 所有查询执行后,应发送回应。 我的第一个尝试看起来像这样:
templateData = {}; model.getA(function(result) { templateData.A = result; model.getB(function(result) { templateData.B = result; model.getC(function(result) { templateData.C = result; response.send('template', templateData); }) }) });
当然,Node.js中的这种方法并不好,因为所有的函数都是按顺序调用的,我放弃了asynchronous编程模式的优点。 我是Node.js的新手,并不清楚如何在并行调用getA()
, getB()
和getC()
之后立即发送响应。 有没有一些非常简单和常见的方法来实现这一点?
使用async软件包 :( npm install async
)
async.parallel([ function(){ ... }, function(){ ... } ], callback);
https://github.com/caolan/async#parallel
或者,您可以使用承诺 :
Q.spread( [ model.getA(), model.getB(), model.getC() ], function(a, b, c) { // set templateData return templateData; } ).then(...);
(假设get*()
方法返回promise)
你可以使用一个函数来检查所有的数据是否作为你的查询的callback函数,如果所有的数据都存在,那么可以发送响应。 所以像
function checkData(){ if (templateData.A && templateData.B && templateData.C){ //send your response } }
那么就不要套上你的电话
model.getA(function(result){ templateData.A = result; checkData(); } model.getB(function(result){ templateData.B = result; checkData(); } model.getC(function(result){ templateData.C = result; checkData(); }
当所有三个完成你的回应将被发送。
- 在nodejs(asynchronous)循环和callback中寻找适当的模式
- 数百个坐标之间的Nodejs距离计算阻塞了我的服务器
- 想要将variables传递给节点asynchronous的映射方法
- node.js如何用单进程实现asynchronouscallback
- 如何用process.nextTick进行testing
- 将parameter passing给Javascript / NodeJs中的预定义callback
- 每个asynchronous里面的nodejsasynchronous并行
- 如何控制NodeJS中的应用程序stream
- 如何在出现特定情况时退出async.forEach循环+节点