2017-07-09 6 views
0

Ich möchte eine Schleife von Mungo-Abfragen ausführen, um eine Datenbank basierend auf einem Array namens dateStarts zu aktualisieren. Danach möchte ich einen letzten Befehl ausführen, aber ich möchte, dass er die Datenbanken als nach all diese Aktualisierung verwendet. Wie geschrieben, scheint die letzte Abfrage zu laufen, bevor die Schleife fertig ist. Wie repariere ich das?letzte Mungo-Abfrage ausführen, nachdem die Schleife abgeschlossen ist

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

Antwort

0

Die Funktion update ist ein asynchroner Vorgang, weshalb remove vor der Updates ausführen wird. Sie können eine Reihe von Versprechungen bauen und verwenden Promise.all alle Updates zu lösen, bevor diese entfernen zu tun:

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) => ...); 

Um Mungo die native Versprechen (Knoten Version 6 oder höher) verwenden zu machen, können Sie diese an der Spitze zu tun :

mongoose.Promise = global.Promise; 
Verwandte Themen