2017-01-24 2 views
1

я хочу иметь два вложенных циклов дляnodejs Async.each Вложенный цикл Путаница

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") 

Теперь я ожидаю выход Как { InnerLoopFinished OuterLoopFinished } согласно списку Размер и

процесса Finsished

Bt, что я получаю Процесс завершается сначала и InnerLoop и Outerloop сообщение, зависящее от размера петли.

Im обрабатывает данные в обеих циклах, поэтому, когда управление переходит к печати сообщения «окончательный процесс», я ожидаю, что все мои данные будут заполнены объектом до этого и отправят его как ответ, который не достигнут здесь

Я думаю imnt не ясно, об идее работы async.each..Can кто-то поможет мне достичь требуемого выходного

+0

это асинхронный. Асинхронные функции возвращаются немедленно, не ожидая чего-либо. Вот почему сначала печатается «Обработанный процесс». В этом весь смысл обратных вызовов и обещаний. Они вызываются, когда процесс заканчивается, чтобы вы могли вставлять код, чтобы делать то, что хотите, когда это произойдет. – slebetman

+0

@slebetman так как я могу решить мою проблему? ... один цикл работает отлично в последовательном режиме, используя asyn.each ... Но для вложенного цикла он не работает, как я хотел .... – DrVishnu

+0

Во-первых, у вас есть опечатка, я думаю. У вас есть две переменные, называемые «callback1», и ни один из них не вызван «callback» – slebetman

ответ

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

Спасибо большое .. был abt, чтобы опубликовать, что я получил решение тем же методом, что и сделал .. Бит позже ..bt еще раз спасибо @mustafa – DrVishnu