In Ihrem Code wird das für die findUser-Funktion erstellte Versprechen ausgeführt sofort, aber die Funktion selbst ist asynchron. Daher wird das Versprechen vorzeitig aufgelöst, bevor findUser Daten abrufen kann.
Ändern Sie Ihre findUser-Funktion so, dass sie ein Versprechen zurückgibt, anstatt zu versuchen, Werte synchron zurückzugeben. Hier ist ein Beispiel:
me.findUser = function(params, res) { var username = params.username; return new Promise(function (resolve, reject) { pool.getConnection(function (err, connection) { if (err) { reject(err); return; } connection.query('select Id, Name, Password from Users ' + 'where Users.Name = ?', [username], function (err, rows) { connection.release(); if (err) { reject(err); } else { resolve(rows); } }); }); }); }
Die Meldung „Fehlerhandler zweiter“ wird angezeigt, weil der Fehlerhandler im zweiten Versprechen abgelehnt wird, wenn findUser auf einen Fehler stößt. Um dies zu beheben, ändern Sie den Code wie folgt:
promise.then(function(data) { return new Promise(function (resolve, reject) { loginC.doSomething(data); if (success) { console.log("Success 2"); resolve(data); } else { console.log("Failed 2"); reject("Error in doSomething"); } }); }).catch(function (reason) { console.log("Error in findUser: " + reason); });
Das obige ist der detaillierte Inhalt vonWarum wird mein Versprechen in Node.js mit Express und Promises vorzeitig aufgelöst?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!