Problem mit der Rückgabe von Daten aus mehreren Datenbankabfragen in einer Schleife
Bei der Ausführung mehrerer Datenbankabfragen innerhalb einer Schleife ist es wichtig, asynchrone Vorgänge zu verarbeiten ordnungsgemäß, um sicherzustellen, dass alle Daten abgerufen werden, bevor Sie sie an Ihren Kunden zurücksenden.
Im bereitgestellten Code wird die Die getPrayerInCat-Funktion führt mehrere MongoDB-Abfragen mithilfe des forEach-Rückrufs aus. Der Code gibt jedoch sofort undefiniert zurück, da die Funktion nicht auf den Abschluss der Ergebnisse aller Datenbankabfragen wartet.
Um dieses Problem zu lösen, müssen wir uns bei der Arbeit mit Versprechen an die folgenden Grundsätze halten:
Mit diesen Prinzipien können wir eine Version der getPrayerCount-Funktion erstellen, die a zurückgibt Versprechen:
function getPrayerCount(data2) { var id = data2.id; return find({prayerCat:id}) .then(function(prayer) { if (!prayer) data2.prayersCount = 0; else data2.prayersCount = prayer.length; return data2; }); }
Um mehrere asynchrone Aufgaben zu bearbeiten und auf deren Abschluss zu warten, können wir verwenden Q.all:
function getPrayerInCat(data) { var promises = data.map(getPrayerCount); // don't use forEach return Q.all(promises); }
Durch die Rückgabe eines Versprechens von der getPrayerInCat-Funktion können wir warten, bis alle Abfragen abgeschlossen sind, bevor wir die Ergebnisse zurückgeben.
Das obige ist der detaillierte Inhalt vonWie kann ich Daten aus mehreren Datenbankabfragen innerhalb einer Schleife in JavaScript zurückgeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!