2017-07-09 47 views
0

我想運行一個貓鼬查詢循環來更新基於名爲dateStarts的數組的數據庫。之後,我想執行一個最終的命令,但我希望它使用之後的所有更新的之後的數據庫。正如所寫的,最終的查詢似乎在循環完成之前運行。我如何解決這個問題?循環完成後執行最終貓鼬查詢

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

功能update是一個異步操作,這就是爲什麼remove被更新的前執行。你可以建立承諾的數組,並使用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;