Heim  >  Artikel  >  Web-Frontend  >  Wie werden Rückgabedaten von asynchronen MongoDB-Abfragen innerhalb einer Schleife verarbeitet?

Wie werden Rückgabedaten von asynchronen MongoDB-Abfragen innerhalb einer Schleife verarbeitet?

DDD
DDDOriginal
2024-11-09 16:32:02956Durchsuche

How to Handle Return Data from Asynchronous MongoDB Queries Within a Loop?

Rückgabedaten von asynchronen Abfragen in einer Schleife auflösen

In Datenbankanwendungen ist es häufig erforderlich, mehrere Abfragen in einer Schleife auszuführen und die zurückzugeben aggregierte Ergebnisse. Bei der Verwendung asynchroner Datenbankoperationen ist es von entscheidender Bedeutung, die zurückgegebenen Daten korrekt zu verarbeiten und sicherzustellen, dass Ihr Code auf den Abschluss aller Abfragen wartet, bevor er eine Antwort sendet.

In diesem Szenario zielt unser Code darauf ab, MongoDB nach mehreren Gebeten abzufragen Kategorien und geben ein Datenarray zurück, das die Kategorie-IDs, Gebetszahlen und andere Details enthält. Eine einfache Rückkehr in die Schleife führte jedoch zu undefinierten Werten, da der Code nicht auf den Abschluss der asynchronen Abfragen wartete.

Um dieses Problem zu lösen, können wir die Q-Bibliothek verwenden, die bei der Verwaltung asynchroner Vorgänge hilft. Leider gibt die Suchmethode der MongoDB-Bibliothek kein Versprechen zurück, daher verwenden wir die Knotenschnittstellen-Helfer von Q, um einen sofortigen Wrapper darum zu erstellen und sicherzustellen, dass sie ein Versprechen zurückgibt:

var find = Q.nbind(Prayer.find, Prayer);

Befolgen Sie die Prinzipien des Versprechens Bei der Verarbeitung ändern wir den forEach-Rückruf, um Versprechen für jede Abfrage zurückzugeben, und verwenden dann Q.all, um auf die Auflösung aller Versprechen zu warten:

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

function getPrayerInCat(data) {
    var promises = data.map(getPrayerCount);
    return Q.all(promises);
}

Dieser Ansatz stellt sicher, dass unser Code auf den Abschluss aller Abfragen wartet, bevor er zurückgibt die aggregierten Daten und verhindert so undefinierte Werte. Denken Sie daran, dass es bei der Arbeit mit asynchronen Vorgängen wichtig ist, die Regeln für die Handhabung von Versprechen einzuhalten, bei Bedarf Wrapper zu erstellen und Bibliotheken wie Q zu verwenden, um den Prozess zu vereinfachen.

Das obige ist der detaillierte Inhalt vonWie werden Rückgabedaten von asynchronen MongoDB-Abfragen innerhalb einer Schleife verarbeitet?. 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