2017-07-09 7 views
0

mongooseクエリのループを実行して、dateStartsという配列に基づいてデータベースを更新したいとします。その後、私は最終的なコマンドを実行したいですが、の後にのようにデータベースを使用したいと考えています。書かれているように、ループが完了する前に最終的なクエリが実行されているようです。どうすれば修正できますか?ループ完了後に最終的なmongooseクエリを実行します

dateStarts.forEach(function(datevalue) 
     { 
      var conditions = {//conditions}; 
      var update  = {//updates}; 
      titleRecords.update(conditions, update, options, function(err, data) 
      { 
       if (err) throw err; 
      }); 
     }) //end of forEach loop 
     titleRecords.remove({//finalcondition}); 

答えて

0

機能updateremoveはアップデートの前に実行される理由がある、非同期操作です。あなたが約束の配列を作成し、その削除を行う前にすべての更新を解決するためにPromise.allを使用することができます。

var updatePromises = dateStarts.map((datevalue) => { 
    var conditions = {//conditions}; 
    var update  = {//updates}; 
    return titleRecords.update(conditions, update, options); 
}); 

Promise.all(updatePromises) 
    .then(() => titleRecords.remove({//finalcondition})) 
    .catch((error) => ...); 

マングースは、ネイティブの約束(ノードバージョン6以上)を使用するようにするには、あなたが一番上にこれを行うことができます:

mongoose.Promise = global.Promise; 
関連する問題