In Ihrem bereitgestellten Code pausiert das Versprechen nicht die Ausführung von Der Code, der auf den Abschluss der findUser-Funktion wartet. Dies liegt daran, dass die Funktion findUser kein Versprechen zurückgibt. Stattdessen wird undefiniert sofort zurückgegeben, wodurch der Code fortgesetzt wird, ohne auf den Abschluss der Datenbankabfrage zu warten.
Um dies zu beheben, sollte die Funktion findUser ein Versprechen zurückgeben, das mit aufgelöst wird die aus der Datenbank abgerufenen Zeilen:
me.findUser = function(params, res) { var username = params.username; return new Promise(function (res, rej) { pool.getConnection(function (err, connection) { if (err) { rej('db error'); } else { connection.query('SELECT Id, Name, Password FROM Users WHERE Users.Name = ?', [username], function (err, rows) { connection.release(); if (!err) { res(rows); } else { rej('other error'); } }); } }); }); }
Mit dieser Änderung pausiert das Versprechen die Ausführung des Codes und wartet, bis die Abfrage abgeschlossen ist, bevor es mit dem fortfährt if/else-Anweisung.
Der zweite Fehlerhandler wird ausgegeben, da die findUser-Funktion das Versprechen mit einer Fehlermeldung ablehnt. Dadurch wird der Then-Handler übersprungen und stattdessen der Catch-Handler (mit der Meldung „Error Handler Second“) aufgerufen.
Um dieses Problem zu beheben, stellen Sie sicher, dass die Funktion „findUser“ Fehler behandelt und wie gewünscht auflöst Daten korrekt. Darüber hinaus können Sie der nächsten Ebene der Versprechenskette eine Fehlerbehandlung hinzufügen, um alle nachfolgenden Fehler zu behandeln.
Das obige ist der detaillierte Inhalt vonWarum wartet mein Versprechen in Node.js Express nicht auf den Abschluss der Datenbankabfrage?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!