在您提供的程式碼中,promise 不會暫停執行等待findUser 函數完成的程式碼。這是因為 findUser 函數沒有回傳承諾。相反,它會立即傳回 undefined,導致程式碼無需等待資料庫查詢完成即可繼續執行。
要解決此問題,findUser 函數應傳回一個可解析的Promise從資料庫檢索的行:
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'); } }); } }); }); }
透過此更改,Promise 將暫停程式碼的執行並等待查詢完成,然後再繼續執行if/else 語句。
錯誤處理程序錯誤處理程序第二個輸出是因為 findUser 函數拒絕帶有錯誤訊息的 Promise。這會導致 then 處理程序被跳過,並呼叫 catch 處理程序(帶有訊息「第二個錯誤處理程序」)。
要解決此問題,請確保 findUser 函數處理錯誤並以所需的方式解析資料正確。此外,您可以將錯誤處理新增至承諾鏈的下一層以處理任何後續錯誤。
以上是為什麼 Node.js Express 中的 Promise 不等待資料庫查詢完成?的詳細內容。更多資訊請關注PHP中文網其他相關文章!