【问题标题】:async.forEach iterationasync.forEach 迭代
【发布时间】:2014-10-21 04:16:01
【问题描述】:

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

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 循环迭代。这段代码有什么错误请帮助我。 提前谢谢你!

【问题讨论】:

  • 你真的应该考虑使用流控制库之一(npm install seq 可以),这段代码很难读

标签: node.js asynchronous


【解决方案1】:

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

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

【讨论】:

  • 是的,就是这样,但我的代码中有一些错误,这就是为什么它不能正常工作,但是在对那个错误进行更改后它正在工作。
猜你喜欢
  • 2017-04-08
  • 1970-01-01
  • 1970-01-01
  • 2018-01-09
  • 2015-11-02
  • 2012-10-24
  • 2016-02-17
  • 2021-08-24
  • 2016-10-22
相关资源
最近更新 更多