2012-03-14 11 views
0

複数のコレクションのデータが必要な場合は、すべてのデータをマージします。私は逐次実行のための非同期モジュールを使用しています。私はと呼ばれる最初のforeachループsholudための内部(第2)のforeachループコールバック関数を完了した後に、このコードでasync.forEach iteration

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); 
         });       
        } 
       } 
      }); 

のようなコードを書いたが、第2、foreachループの最初の繰り返しの後の最初のループのコールバックが呼び出されると、それは第二のforeachを続行しますループ反復。このコードで何が間違っているのか教えてください。 ありがとうございます!

+0

あなたは本当に、このコードはほとんど読みやすいです( 'NPM行いますseq'をインストール)フロー制御ライブラリのいずれかを使用して考慮すべきである – framp

答えて

2

最初のforEachSeriesのcallback()を内側のforEachSeriesの最終コールバックにコールする必要があります。

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

はい、それはそのようですが、それはなぜだ私のコードでは、いくつかの間違いがあります適切に動作していませんが、間違いの変更を行った後で動作しています。 –

関連する問題