2017-01-24 2 views
1

i für Schleifen zwei verschachtelte haben wollenNodeJS Async.each Verschachtelte Schleife Verwirrung

async.each(ListA, 
function(itemA,callback1){ 
     //process itemA 
     async.each(itemA.Children, 
     function(itemAChild,callback1){ 
       //process itemAChild 
       callback1(); 
       }), 
    function(err){ 
    console.log("InnerLoopFinished") 
    } 

callback(); 
}),function(err){ 
console.log("OuterLoopFinished") 
} 
console.log("Process Finished") 

Jetzt erwarte ich eine Ausgabe wie { InnerLoopFinished OuterLoopFinished} nach Liste Größe und

Prozess Finsished

Bt, was ich bekomme, ist Prozess beendet zuerst und InnerLoop und Outerloop Nachricht in Abhängigkeit von der Größe der Schleife ..

Im Prozess Daten in beiden Schleifen so, wenn die Kontrolle geht zum Drucken "final Prozess" Nachricht Ich erwarte, dass alle meine Daten zu einem Objekt bevölkert ist vor und senden Sie es als eine Antwort, die hier nicht erreicht wird

ich denke imnt nicht klar Idee der Arbeit async.each..Can jemand mir helfen, die gewünschte Ausgabe

+0

Es ist asynchron zu erreichen. Asynchrone Funktionen kehren sofort zurück, ohne darauf zu warten, etwas zu verarbeiten. Deshalb wird "Prozess fertig" zuerst gedruckt. Das ist der Sinn von Rückrufen und Versprechen. Sie werden aufgerufen, wenn der Prozess abgeschlossen ist, sodass Sie Code einfügen können, um das zu tun, was Sie möchten, wenn dies geschieht. – slebetman

+0

@slebetman also, wie kann ich mein Problem lösen? ... die einzelne Schleife funktioniert im seriellen Modus gut mit asyn.each ... Aber für verschachtelte Schleife funktioniert es nicht wie ich es wollte .... – DrVishnu

+0

Zuerst haben Sie einen Tippfehler, denke ich. Sie haben zwei Variablen namens "callback1" und keine namens "callback" – slebetman

Antwort

2
async.each(ListA, function (itemA, callback) { //loop through array 
    //process itemA 
    async.each(itemA.Children, function (itemAChild, callback1) { //loop through array 
    //process itemAChild 
    callback1(); 
    }, function(err) { 
     console.log("InnerLoopFinished"); 
     callback(); 
    }); 
    }, function(err) { 
    console.log("OuterLoopFinished"); 
    console.log('Process Finished'); 
}); 
+1

Vielen Dank .. war zu posten, dass ich eine Lösung mit der gleichen Methode wie du tat .. Bit spät ..bt danke wieder @mustafa – DrVishnu