在提供的程式碼中,第一個Promise 不會等待findUser() 回傳後再繼續,因為:
將資料庫查詢包裝在返回Promise 並解析的函數中帶有查詢結果的承諾:
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 } }); } }); }); }
第二個承諾的錯誤處理程序被調用,因為第一個承諾被拒絕。但是,console.log(“失敗”);錯誤處理程序中的行未執行,因為 .then() 區塊內拋出了錯誤。
要正確處理第一個 Promise 的拒絕,請使用 .catch() 而不是 .then():
promise.then(function(data) { return new Promise(...); }, function (reason) { console.log("Failed"); });
以上是為什麼第二個 Promise 錯誤處理程序在第一個 Promise 的「失敗」輸出之前執行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!