我需要在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中的这种方法一点也不好,因为所有功能都被顺序调用,并且我失去了异步编程模式的优势。我是Node.js的新手,但我仍然不清楚如何并行调用getA()getB()getC()并在一切完成后发送响应。是否有一些真正简单通用的方法来实现这一目标?

最佳答案

使用async package:(npm install async)

async.parallel([
    function(){ ... },
    function(){ ... }
], callback);

https://github.com/caolan/async#parallel

另外,您可以使用promises:
Q.spread(
    [ model.getA(), model.getB(), model.getC() ],
    function(a, b, c) {
        // set templateData
        return templateData;
    }
).then(...);

(假设get*()方法返回promise)

07-24 09:33