」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 在處理資料庫查詢時如何在 Node.js 中正確連結 Promise?

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

發佈於2024-11-21
瀏覽:512

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

promises的使用允許代碼被執行依序。在提供的程式碼中,第一個 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");
});

錯誤處理

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

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

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3