我正在使用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请求完成,它就会对其进行调用。是的:您可能需要嵌套回调。

09-28 13:51