Heim  >  Artikel  >  Datenbank  >  Wie kann ich Versprechen in Node.js korrekt verketten, wenn ich mit Datenbankabfragen arbeite?

Wie kann ich Versprechen in Node.js korrekt verketten, wenn ich mit Datenbankabfragen arbeite?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-14 09:30:02275Durchsuche

How Can I Chain Promises Correctly in Node.js When Working with Database Queries?

Versprechungs- und Verbindungsprobleme

In diesem Node.js-Code wird erwartet, dass ein Versprechen auf den Abschluss der findUser-Funktion wartet, die das tut es nicht. Das Problem ergibt sich aus der asynchronen Ausführung von Datenbankabfragen.

Verbindungsrückruffunktion

In findUser wird mithilfe von pool.getConnection eine Verbindung zur Datenbank hergestellt. Diese Funktion verwendet als Argument eine Callback-Funktion, die aufgerufen wird, wenn die Verbindung bereit ist. Allerdings gibt der Code innerhalb dieses Rückrufs fälschlicherweise Daten zurück, was dazu führt, dass undefiniert zurückgegeben wird, bevor die Abfrage abgeschlossen ist.

Um dieses Problem zu beheben, sollte die findUser-Funktion einen Rückruf an pool.getConnection übergeben, der ein Versprechen auflöst oder ablehnt. Gibt an, ob die Abfrage erfolgreich war oder nicht.

Verkettung von Versprechen

Die Verwendung von Versprechen ermöglicht die sequentielle Ausführung von Code. Im bereitgestellten Code sollte das erste Versprechen mit dem nächsten Versprechen verkettet werden, indem „dann“ anstelle von Rückruffunktionen verwendet wird, wie unten gezeigt:

promise.then(function(rows) {
    return new Promise(function (resolve, reject) {
        loginC.doSomething(data);

        if (success) {
            resolve(data);
        } else {
            reject(reason);
        }
    });
}, function(reason) {
    console.log("error handler second");
});

Fehlerbehandlung

The Der Grund für die Ausgabe der Meldung „Error Handler Second“ liegt darin, dass ein Fehler auftritt, wenn die Datenbankverbindung fehlschlägt. Die Fehlerbehandlung im Ereignis-Listener „connection.on('error“) wird nicht korrekt verwendet. Dieser Fehler wird an die findUser-Funktion weitergegeben und vom zweiten Fehlerhandler in der Verkettung erfasst.

Die findUser-Funktion sollte das Versprechen mit der Fehlermeldung ablehnen, die dann an den Fehlerhandler in der Versprechenskette weitergegeben wird .

Das obige ist der detaillierte Inhalt vonWie kann ich Versprechen in Node.js korrekt verketten, wenn ich mit Datenbankabfragen arbeite?. 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