【问题标题】:Async.waterfall within a for-loop not iterating properly [duplicate]for循环中的Async.waterfall未正确迭代[重复]
【发布时间】:2015-02-22 07:56:15
【问题描述】:

这显然是一个极其简化的代码 sn-p,但我的代码库被这个示例设置为模仿的东西所支撑。

当我尝试从 async.waterfall 函数中记录当前的 for 循环索引时,我得到 2。2 是我的数组中的总元素数,但当然索引应该是 0 和 1。我过去,我在 for 循环中有效地使用了 async.MAP,所以我不确定为什么这个异步函数不起作用。感谢您提供有关此问题或嵌套异步库函数主题的任何帮助。

var objects = [
    {objectName: "hello",
        objectPurposes: ["demo"]},
    {objectName: "goodbye",
        objectPurposes: ["demo", "fun"]}];

for (var i=0; i<objects.length; i++){
    async.waterfall([
        function(callback){
            console.log(i);
        }
    ])
}

【问题讨论】:

  • async-waterfall 接受一个数组作为第一个参数,这将是您的对象数组,以在数组的长度上对其进行迭代。
  • async-waterfall 的第一个参数是任务数组,不是吗?
  • 我认为 Ravi 的意思是 async.forEach

标签: javascript node.js for-loop asynchronous


【解决方案1】:

嗯,在 async.waterfall 完成其处理时,i 的值会发生变化。如果您想保留 i 的值,可以将其包装在 IIFE 周围。

var objects = [{
    objectName: "hello",
    objectPurposes: ["demo"]
}, {
    objectName: "goodbye",
    objectPurposes: ["demo", "fun"]
}];

for (var i = 0; i < objects.length; i++) {
    (function(i) {
        async.waterfall([
            function(callback) {
                console.log(i);
            }
        ])
    })(i);
};

我更愿意使用 obj.shift() 并将 async.waterfull 包装在一个递归函数下以实现此目的。 http://book.mixu.net/node/ch7.html 看完这个,真的很有帮助。

【讨论】:

    猜你喜欢
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 2018-10-27
    • 2018-09-12
    相关资源
    最近更新 更多