2014-12-24 92 views
2

這顯然是一個非常簡化的代碼片段,但是我的代碼庫被一些本例設置爲模仿的東西所阻擋。for循環中的Async.waterfall沒有正確迭代

當我嘗試從async.waterfall函數內記錄當前的for-loop索引時,我得到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); 
     } 
    ]) 
} 
+0

[async-waterfall](https://github.com/caolan/async#waterfalltasks-callback)接受一個數組作爲第一個參數,它將是您的對象數組,它將遍歷數組的長度。 – Ravi

+0

async-waterfall的第一個參數是任務數組,不是嗎? – jaja

+0

我認爲拉維意味着'async.forEach'。 – icktoofay

回答

1

好了,我的價值將由要保留我的價值async.waterfall完成其processing.If時可能已經改變,你可以將其套在一個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經過這個,它確實有幫助。