javascript - 使用 async.waterfall

标签 javascript node.js asynchronous async.js

我正在使用 node.js 和异步包。

这是我的代码:

async.waterfall(
[
    function(callback) {
        var data = getSomeData();
        callback(null, data);
    },
    function(data, callback) {
        someFunctionThatNeedsData(data);
        callback(null, 'done');
    }
],
function(err, result) {
}
);

getSomeData 有一个异步 HTTP 请求,它从网络服务中获取一些数据。我想等到收到响应,然后返回该数据并将其传递给 someFunctionThatNeedsData

我期望的是 getSomeData(包括其中的回调)必须在继续调用 someFunctionThatNeedsData 之前完成。

问题是,尽管在这里使用了 waterfall 函数,但 data 在到达 someFunctionThatNeedsData 时仍未定义。

此外,从 console.log 我可以看到 getSomeData 的结尾在 getSomeData 内部的回调甚至开始之前就已到达。

我是不是错误地使用了 waterfall,或者它只是不是这里的正确工具?如果只是不对,我可以用什么来达到预期的效果?

或者我是否必须放弃深度嵌套的回调(在未来的工作中,我会这样做)并且必须通过将内联代码提取到命名函数中来缓解它?

最佳答案

getSomeData() has an asynchronous http request that grabs some data from a web service.

这就是问题所在。执行流程已经继续到回调并执行它。这就是异步函数的工作原理!

您必须将回调传递给 getSomeData,它会在 HTTP 请求完成后调用它。所以是的:您可能需要嵌套回调。

关于javascript - 使用 async.waterfall,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22418790/

相关文章:

javascript - 在以后可以使用的 JavaScript 函数中添加选项

Javascript 使用函数访问其他类

javascript - 在这个 javascript 的异步示例中,为什么第二个函数不运行?

c++ - 异步使用 ReadDirectoryChangesW 时的线程死锁

javascript - 为什么ajax成功调用后jquery会中断?

JavaScript 函数 eval() 抛出堆栈外配额异常

JavaScript 对象和数据类型

javascript - 使用 js-xlsx 导出 .xlsx 文件时如何设置单元格宽度

macos - node.js 简单的 tcp 测试

python - 将 python 函数列表异步应用于单个参数