2015-04-07 22 views
0

我有2個嵌套的async.each。他們看起來像:節點js應用程序中的async.js問題

async.each(result, function(row, callbackrow) { 
    tot = 0; 
    console.log('UID:', row.uid); 

    async.each(row.vbs, function(vb, callback){ 
    checkInteractions(row.uid, vb.vbNID, function(data){ 
     console.log(data); 
     callback(); 
    }); 
    }, function(err){ console.log('done 1'); }); 

    callbackrow(); 
}, function(err){ console.log("done all"); }); 

我的問題是,checkinteraction異步調用導致問題。沒有它,控制檯日誌從第二個每個第一個異步調用每個。有了它,我完成了所有的消息,並且在嵌套的(第二個)異步每個執行它的代碼之後。我需要它像一個for的同步呼叫。對於第一個for的每個元素,第二個要在執行第一個for之前的下一個索引之前執行。

回答

1

我覺得應該callbackrow作爲內環的最終回調傳遞,從而使外環知道何時執行到下一個迭代,就像這樣:

async.each(result, function(row, callbackrow) { 
    tot = 0; 
    console.log('UID:', row.uid); 

    async.each(row.vbs, function(vb, callback){ 
    checkInteractions(row.uid, vb.vbNID, function(data){ 
     console.log(data); 
     callback(); 
    }); 
    }, function(err){ 
    console.log('done 1'); 
    callbackrow(); 
    }); 

}, function(err){ console.log("done all"); }); 
+0

tryed這一點。我按順序獲得最終的回調控制檯日誌。來自async的數據日誌在外循環調用其最終日誌回調後仍然執行。 – user3761400