javascript - Node.js 中的并行函数调用

标签 javascript node.js function asynchronous

我需要在 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 )

关于javascript - Node.js 中的并行函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14035015/

相关文章:

c++ - 在 C++ 中将函数指针中的 const 参数转换为非 const

function - 如何省略调用函数的$ null参数?

javascript - 如何阻止 JavaScript 函数在表单提交时重置

javascript - jQuery 选择使用 prop 或 attr 时不起作用的所有复选框

javascript - 如何将 'fadein' 和 'animate' 文本放在页面中间?

javascript - jquery 从页面上的标签获取 href 和文本并将它们显示在 div 中

node.js - Visual-studio-code:如何执行 Command<T>(command: string, ...rest: any[]): Thenable<T>

javascript - Azure 应用服务中的 process.env.NODE_ENV 在哪里

javascript - cursor.map().toArray() 与 cursor.toArray().then(array => array.map())

r - 使用 dplyr/ggplot 将变量之间的交互传递给函数