首頁 >資料庫 >mysql教程 >在處理資料庫查詢時,如何在 Node.js 中正確連結 Promise?

在處理資料庫查詢時,如何在 Node.js 中正確連結 Promise?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-14 09:30:02348瀏覽

How Can I Chain Promises Correctly in Node.js When Working with Database Queries?

Promise 和連接問題

在此 Node.js 程式碼中,promise 預計會等待 findUser 函數完成,這事實並非如此。該問題源自於資料庫查詢的非同步執行。

連接回呼函數

在 findUser 中,使用 pool.getConnection 建立與資料庫的連線。此函數採用回調函數作為參數,當連接準備就緒時呼叫函數。但是,程式碼在此回調中錯誤地傳回數據,導致在查詢完成之前傳回 undefined。

要解決此問題,findUser 函數應將回呼傳遞給 pool.getConnection 來解析或拒絕承諾,指示查詢是否成功。

Chaining Promises

使用Promise 允許順序執行程式碼。在提供的程式碼中,第一個Promise 應該使用then 而不是回調函數連結到下一個Promise,如下所示:

promise.then(function(rows) {
    return new Promise(function (resolve, reject) {
        loginC.doSomething(data);

        if (success) {
            resolve(data);
        } else {
            reject(reason);
        }
    });
}, function(reason) {
    console.log("error handler second");
});

錯誤處理

The之所以輸出「error handler secondary」訊息,是因為資料庫連線失敗時發生錯誤。 connection.on('error') 事件偵聽器中的錯誤處理未正確使用。此錯誤傳播到 findUser 函數,並被鏈中的第二個錯誤處理程序捕獲。

findUser 函數應該拒絕帶有錯誤訊息的 Promise,然後該錯誤訊息將傳播到 Promise 鏈中的錯誤處理程序.

以上是在處理資料庫查詢時,如何在 Node.js 中正確連結 Promise?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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