Heim > Web-Frontend > js-Tutorial > Hauptteil

Wie kann mit MongoDB- und Q-Versprechen sichergestellt werden, dass Datenbankabfragen abgeschlossen werden, bevor Ergebnisse in einer Schleife zurückgegeben werden?

DDD
Freigeben: 2024-11-10 17:34:03
Original
940 Leute haben es durchsucht

How to Ensure Database Queries Finish Before Returning Results in a Loop with MongoDB and Q Promises?

Problem bei der Rückgabe abgerufener Ergebnisse aus Datenbankabfragen, die in einer Schleife erstellt wurden

Bei dieser Abfrage besteht das Ziel darin, mehrere MongoDB-Abfragen in einer Schleife durchzuführen Schleifen Sie die kombinierten Ergebnisse als einzelnes Datenarray ab und senden Sie sie. Die Verwendung von „return“ innerhalb der Schleife wartet jedoch nicht auf den Abschluss der Datenbankanforderungen, was zu einer undefinierten Antwort führt. Auch der Einsatz von Q.moulde löst das Problem nicht.

Geänderter Code:

var getPrayerInCat = function(data){
    var promises = data.map(function(data2){
        var id = data2.id;
        return Q.nbind(Prayer.find, Prayer)({prayerCat:id})
            .then(function(prayer) {
                if(!prayer) data2.prayersCount = 0;
                else data2.prayersCount = prayer.length;
                return data2;
            })
    });
    return Q.all(promises);
}
Nach dem Login kopieren

Erklärung:

  1. Q.nbind: Diese Funktion wandelt die Prayer.find-Methode in eine Funktion um, die gibt ein Q-Versprechen zurück.
  2. Kettenversprechen:Jede Iteration in der Schleife gibt jetzt ein Versprechen zurück, das mit dem aktualisierten Datenobjekt aufgelöst wird.
  3. Q.all: Diese Funktion kombiniert alle Versprechen in einem einzigen Versprechen, das mit einem Array aufgelöst wird, das alle aktualisierten Datenobjekte enthält, sobald alle Datenbankabfragen abgeschlossen sind abgeschlossen.
  4. return Q.all(promises);: Diese Zeile stellt sicher, dass die Funktion auf den Abschluss aller Datenbankabfragen wartet und das kombinierte Ergebnis zurückgibt.

Das obige ist der detaillierte Inhalt vonWie kann mit MongoDB- und Q-Versprechen sichergestellt werden, dass Datenbankabfragen abgeschlossen werden, bevor Ergebnisse in einer Schleife zurückgegeben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage