我正在使用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请求,该请求从Web服务获取一些数据。我想等到收到响应后,再返回该数据并将其传递给someFunctionThatNeedsData
。我期望的是
getSomeData
(包括其中的回调)必须在继续调用someFunctionThatNeedsData
之前完成。问题是,尽管在这里使用了
waterfall
函数,但data
在到达someFunctionThatNeedsData
时尚未定义。另外,从
console.log
我可以看到getSomeData
的结尾在getSomeData
内部的回调甚至开始之前就已经到达。我是否错误地使用了
waterfall
,还是这里的工具不正确?如果不正确,我可以使用什么来达到预期的效果?还是我必须辞职于具有深度嵌套的回调(我将在以后的工作中使用它),并且必须通过将内联代码提取到命名函数中来减轻它的负担?
最佳答案
getSomeData()有一个异步http请求,该请求从Web服务获取一些数据。
这就是问题。执行流程已经继续到回调并执行了。这就是异步函数的工作方式!
您必须将回调传递给getSomeData
,一旦HTTP请求完成,它就会对其进行调用。是的:您可能需要嵌套回调。