Heim >Datenbank >MySQL-Tutorial >Warum wird der Fehlerhandler des zweiten Versprechens vor der „fehlgeschlagenen' Ausgabe des ersten Versprechens ausgeführt?
Im bereitgestellten Code das erste Das Versprechen wartet nicht auf die Rückkehr von findUser(), bevor fortgefahren wird, weil:
Schließen Sie die Datenbankabfrage in eine Funktion ein, die ein Versprechen zurückgibt und auflöst das Versprechen mit dem Abfrageergebnis:
me.findUser = function(params, res) { var username = params.username; return new Promise(function (resolve, reject) { pool.getConnection(function (err, connection) { console.log("Connection "); if (err) { console.log("ERROR 1 "); res.send({"code": 100, "status": "Error in connection database"}); reject(err); // Reject the promise with the error } else { connection.query('select Id, Name, Password from Users ' + 'where Users.Name = ?', [username], function (err, rows) { connection.release(); if (!err) { resolve(rows); // Resolve the promise with the query result } else { reject(err); // Reject the promise with the error } }); } }); }); }
Der Fehlerhandler für das zweite Versprechen wird aufgerufen, weil das erste Versprechen abgelehnt wird. Die Datei console.log("Failed"); Zeile im Fehlerhandler wird nicht ausgeführt, da ein Fehler innerhalb des .then()-Blocks ausgelöst wird.
Um die Ablehnung des ersten Versprechens korrekt zu handhaben, verwenden Sie .catch() anstelle von .then():
promise.then(function(data) { return new Promise(...); }, function (reason) { console.log("Failed"); });
Das obige ist der detaillierte Inhalt vonWarum wird der Fehlerhandler des zweiten Versprechens vor der „fehlgeschlagenen' Ausgabe des ersten Versprechens ausgeführt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!