在您的程式碼中,為findUser 函數建立的Promise 執行立即執行,但函數本身是非同步的。因此,在 findUser 檢索資料之前,promise 會提前解析。
修改 findUser 函數以傳回 Promise,而不是嘗試同步回傳值。以下是範例:
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); } }); }); }); }
出現「error handler secondary」訊息是因為當 findUser 遇到錯誤時,第二個 Promise 中的錯誤處理程序被拒絕。若要解決此問題,請修改程式碼如下:
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); });
以上是為什麼我的 Promise 在使用 Express 和 Promises 的 Node.js 中過早解析?的詳細內容。更多資訊請關注PHP中文網其他相關文章!