for循环中的Async.waterfall没有正确迭代

时间:2014-12-24 06:56:21

标签: javascript node.js for-loop asynchronous

这显然是一个极其简化的代码片段,但我的代码库被这个例子设置为模仿的东西所阻碍。

当我尝试从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);
        }
    ])
}

1 个答案:

答案 0 :(得分: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通过这个,它真的很有帮助。

相关问题