在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(); } 

当所有三个完成你的回应将被发送。