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!