async.forEach итерация - PullRequest
       4

async.forEach итерация

0 голосов
/ 14 марта 2012

Я хочу данные из нескольких коллекций, а затем хочу объединить все данные. Я использую асинхронный модуль для последовательного выполнения. я написал код вроде

var newArray = new Array();
        common.findAllById('list',{'boardId': parseInt(bId)},function(err,result){                            
                if(err) console.log(err);
                else{                                                            
                    if(result != null){                          
                        async.forEachSeries(result, function (res, callback){                                
                            common.findAllById('cards',{'listId':parseInt(res.listId)},function(err,temp){
                                if(err){ callback("errr"+err);}
                                else{                                     
                                    var arr = new Array();
                                    async.forEachSeries(temp, function(tmp,callbackFn){
                                        common.findAllById('checklist',{'cardId':parseInt(tmp.cardId)}, function(err,r){
                                             if(err){ 
                                                 callbackFn("errr"+err);
                                             }
                                             else{
                                             if(r !== null){
                                                console.log("r:");

                                                tmp.checklists = r;                                                
                                                arr.push(tmp);                                                
                                                callbackFn(err);
                                             }
                                             }
                                        });                                        
                                    },function(err){ 
                                        console.log('arr'); 
                                        res.cards = arr; 
                                         console.log(res);
                                    });
                                    newArray.push(res);
                                    callback(err);
                                }                                                                
                            });                            
                        }, function (err){
                            console.log('after:');
                            console.log(newArray);                                                        
                            return response.send(newArray);
                        });                        
                    }
                }
            });

в этом коде после завершения внутренней (второй) функции обратного вызова цикла foreach для первого цикла foreach, который вызывается, но после первой итерации второго цикла foreach вызывается обратный вызов первого цикла, а затем он продолжается со второй итерацией цикла foreach. В чем ошибка в этом коде, пожалуйста, помогите мне. заранее спасибо!

1 Ответ

2 голосов
/ 14 марта 2012

Вы должны вызывать callback () первого forEachSeries для окончательного обратного вызова внутреннего forEachSeries.

},function(err){ 
    console.log('arr'); 
    res.cards = arr; 
    console.log(res);
    newArray.push(res);
    callback(err);
});
...