Heim  >  Artikel  >  Web-Frontend  >  Wie kann ich Daten aus mehreren Datenbankabfragen innerhalb einer Schleife in JavaScript zurückgeben?

Wie kann ich Daten aus mehreren Datenbankabfragen innerhalb einer Schleife in JavaScript zurückgeben?

DDD
DDDOriginal
2024-11-14 22:19:02323Durchsuche

How can I return data from multiple database queries within a loop in JavaScript?

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:

  1. Jede asynchrone Funktion muss ein Versprechen zurückgeben.
  2. Erstellen Sie Wrapper für Funktionen, die keine Versprechen zurückgeben, um diese zu machen Promise-kompatibel.
  3. Alles, was mit einem asynchronen Ergebnis interagiert, sollte in einen .then-Rückruf eingehen.

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!

Stellungnahme:
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