javascript - Node.js 与异步 waterfall 模块同步调用

标签 javascript node.js asynchronous

我正在尝试以下代码

async.waterfall([
  a1, b1, c1  
], function (err, result) {

});
function a1(callback){
// long processing external call 
    setTimeout(function() {
  console.log('delayed str');
}, 5000);
    callback(null, 'one', 'two');
}
function b1(arg1, arg2, callback){
    console.log(arg1)
    callback(null, 'three');
}
function c1(arg1, callback){
    console.log(arg1)

    callback(null, 'done');
}

我期待以下输出

delayed str
one
three

但是我得到了以下输出

one
three
delayed str

如何使用nodejs异步模块实现正确的同步函数调用

最佳答案

您需要将 callback(null, 'one', 'two'); 调用移至超时,以便在超时后调用下一个函数:

async.waterfall([
    a1, b1, c1  
], function (err, result) {

});
function a1(callback){
    setTimeout(function() {
        console.log('delayed str'); 
        callback(null, 'one', 'two');
    }, 5000);
}
function b1(arg1, arg2, callback){
    console.log(arg1)
    callback(null, 'three');
}
function c1(arg1, callback){
    console.log(arg1)
    callback(null, 'done');
}

关于javascript - Node.js 与异步 waterfall 模块同步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28241032/

相关文章:

javascript - 如何使用 jasmine 框架对特定文件 node.js 进行单元测试

javascript - 使用 v8 和过滤器/查找比较两个对象数组的高效方法

java - 从单个客户端向 Thrift 服务调用多个异步请求

javascript - 连接两个字符串并获取剪贴板中的值

javascript - Material-Design-lite 中的 componentHandler.upgradeDom() 带有 for 循环

javascript - 无操作的 JavaScript 约定是什么?

javascript - 从子组件 React 传递参数

javascript - Slack API : Ignore deleted/deactivated users on a conversations. 成员请求

node.js - 迭代器函数内完成的所有任务的 Node 、异步和回调

c# - 如何在空接口(interface)方法上使用异步