我正在使用 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/