首頁 > 資料庫 > mysql教程 > 為什麼 Node.js Express 中的 Promise 不等待資料庫查詢完成?

為什麼 Node.js Express 中的 Promise 不等待資料庫查詢完成?

DDD
發布: 2024-11-19 02:22:02
原創
929 人瀏覽過

Why Is My Promise in Node.js Express Not Waiting for the Database Query to Complete?

Promise 在Node.js Express 中的行為不符合預期

理解問題

在您提供的程式碼中,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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板