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

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

DDD
DDD原創
2024-11-19 02:22:02908瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn