„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > 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?

Veröffentlicht am 21.11.2024
Durchsuche:258

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

Versprechen und Verbindungsprobleme

In diesem Node.js-Code wird erwartet, dass ein Versprechen auf den Abschluss der Funktion findUser wartet 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 Funktion findUser einen Rückruf an pool.getConnection übergeben, der ein Versprechen auflöst oder ablehnt. Gibt an, ob die Abfrage erfolgreich war oder nicht.

Versprechen von Verkettungen

Die Verwendung von Versprechungen ermöglicht die Umsetzung von Code nacheinander ausgeführt. 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

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 .

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3