【发布时间】:2014-04-20 13:23:57
【问题描述】:
我正在使用 node.js 和 async 包。
这是我的代码:
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 是一个异步方法,则该方法的期望是您不返回数据,而是通过回调来返回数据。然后在返回数据时,调用“回调”以移动到下一个函数。
标签: javascript node.js asynchronous async.js