async.forEach迭代

时间:2012-03-14 11:33:43

标签: node.js asynchronous

我想要来自多个集合的数据,然后想要合并所有数据。我正在使用异步模块进行顺序执行。我写了像

这样的代码
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循环sholud的内部(第二个)foreach循环回调函数之后,在此代码中

但是在第二个foreach循环的第一次迭代之后,第一个循环的回调被调用,然后它继续第二个foreach循环迭代。这段代码中的错误请帮助我。 提前谢谢你!

1 个答案:

答案 0 :(得分:2)

你应该将第一个forEachSeries的callback()调用到内部forEachSeries的最终回调中。

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