2016-06-12 14 views
0

データを結合データの配列にプッシュすることができません。データベースに関連するプログラムのクロージャを使用する必要があります。ノードjsへの初心者ですjavascript.andの非同期の性質は、このような多くの問題に陥るようにしています。どのように私はこれに対処することができますか教えてください。結合データ配列にデータをプッシュすることができません

combineddata=[]; 
     if(err){ 
      res.send(err); 
     }else{ 
      for(i=0;i<data.length;i++){ 

      (function(){ 
       x=i; 

       teststats.addTestStats.find({Testid:data[x].Testid},function(err,testdata){ 
        if(err){ 
         res.send(err); 
        }else{ 
         //console.log(testdata+"no"+x+"yes"+i); 
         console.log(x,i) 
         stat.push(testdata); 
         combineddata.push("examplepush"); 
        } 

       }); 
      })(); 


      } 
     } 
res.send(combineddata); 

答えて

0

私はあなたがcombineddataに押し込み"examplepush"は、あなたのHTTP応答に表示されていないことを意味します「をプッシュすることができません」と仮定しています。これは、データベースクエリが非同期的に実行され、コールバック内のプッシュコードが実際にres.sendを実行してハンドラから返された後に実際に実行されるためです。

ループでいくつかのクエリではなく1つのクエリを実行するだけで、データベースクエリコールバックからres.sendを実行できるように、コードをリファクタリングすることができます。

ではなく、forループのあなたのビルディングブロックとして、このようなものを使用してみてください:

var testIds = data.map(function (elem) { return elem.Testid }); 
teststats.addTestStats.find({Testid: {$in: testIds}}, function (err, testdata) { 
    res.send(testdata) // Testdata is now an array matching all Testid's you queried for 
} 
+0

http://stackoverflow.com/questions/38160209/getting-parent-index-inside-a-custom-あなたはこのことについて助言することができます – vanquishers

関連する問題