Heim > Datenbank > MySQL-Tutorial > Warum wartet mein Versprechen in Node.js Express nicht auf den Abschluss der Datenbankabfrage?

Warum wartet mein Versprechen in Node.js Express nicht auf den Abschluss der Datenbankabfrage?

DDD
Freigeben: 2024-11-19 02:22:02
Original
928 Leute haben es durchsucht

Why Is My Promise in Node.js Express Not Waiting for the Database Query to Complete?

Versprechen verhalten sich in Node.js Express nicht wie erwartet

Verstehen des Problems

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.

Korrigieren des Codes

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');
                    }
                });
            }
        });
    });
}
Nach dem Login kopieren

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.

Erläuterung des Fehlerhandlers

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage