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

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

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

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 鏈中的錯誤處理程序.

最新教學 更多>
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-11-23
  • 如何使用 JavaScript 修復可捲動表格的第一行和第一列?
    如何使用 JavaScript 修復可捲動表格的第一行和第一列?
    鎖定可捲動表的第一行和第一列在動態表領域,能夠在保持第一行和第一列的同時水平和垂直滾動固定是一個非常受歡迎的功能。僅使用 CSS 來實現此功能是不可行的,但 JavaScript 可以提供解決方案。 Meetselva 開發了一個出色的插件,使開發人員能夠輕鬆實現此功能。該外掛程式的工作原理是將結構...
    程式設計 發佈於2024-11-23
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1 和 $array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建...
    程式設計 發佈於2024-11-23
  • Go 變數何時會變得無法訪問,「runtime.KeepAlive」如何防止它?
    Go 變數何時會變得無法訪問,「runtime.KeepAlive」如何防止它?
    Go 中變數何時變成不可存取? 在 Go 中,當 Go 運行時確定程式碼不會再次引用該變數時,該變數將變得無法存取。即使變數仍在其範圍內,也會發生這種情況。 範例:考慮以下程式碼片段:type File struct { d int } func main() { d, err := sys...
    程式設計 發佈於2024-11-23
  • 可見性與顯示:隱藏元素哪個比較好?
    可見性與顯示:隱藏元素哪個比較好?
    隱藏可見性元素與顯示的影響為了簡化 Web 應用程序,選單和對話框小部件的行為需要被修改。最初,選單的 div 框是使用 display: none; 隱藏的。不透明度:0;。當需要選單時,其樣式改為display: block;然後使用 jQuery UI 位置實用程式進行定位。最後,它的不透明度...
    程式設計 發佈於2024-11-23
  • 在 Go 中使用 WebSocket 進行即時通信
    在 Go 中使用 WebSocket 進行即時通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    程式設計 發佈於2024-11-23
  • 儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    解決PHP 中的POST 請求故障在提供的程式碼片段中:action=''而非:action="<?php echo $_SERVER['PHP_SELF'];?>";?>"檢查$_POST陣列:表單提交後使用 var_dump 檢查 $_POST 陣列的內...
    程式設計 發佈於2024-11-23
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-11-23
  • 為什麼 Go 給我「聲明錯誤但未使用」錯誤?
    為什麼 Go 給我「聲明錯誤但未使用」錯誤?
    Go 中的變數用法在Go 中,宣告一個變數意味著它的預期用途,如果不使用它會導致編譯時錯誤錯誤。這種做法源自於該語言對程式碼清晰度的強調和避免不必要的元素。 提供的程式碼片段會觸發錯誤“errelastedandnotused”,因為變數“err”已聲明但從未在程式碼。雖然不存在作用域或陰影問題,但...
    程式設計 發佈於2024-11-23
  • SWIG 如何彌補 C++ 函式庫和 Node.js 之間的差距?
    SWIG 如何彌補 C++ 函式庫和 Node.js 之間的差距?
    如何使用SWIG 將C 函式庫整合到Node.js 中在Node.js 中利用C 函式庫可以增強Node.js 的功能。 js 應用程式。 SWIG(簡化包裝器和介面產生器)提供了強大的功能,可彌合 C 和各種語言(包括 JavaScript)之間的差距。 使用 SWIG 3.0 及更高版本,您可以...
    程式設計 發佈於2024-11-23
  • 我們如何在 Python 單元測試中模擬請求和回應?
    我們如何在 Python 單元測試中模擬請求和回應?
    如何模擬請求和回應簡介Python中的單元測試通常涉及模擬中的單元測試通常涉及模擬外部依賴項來模擬現實世界的場景。模擬使我們能夠控制這些依賴項的行為,為我們的測試提供更大的穩定性和可預測性。本文示範如何模擬 Python 的 requests 模組及其回應,以促進有效的單元測試。 第 1 步:模擬請...
    程式設計 發佈於2024-11-23
  • 如何在 Python 中檢查整除性而不出現除法陷阱?
    如何在 Python 中檢查整除性而不出現除法陷阱?
    在Python中檢查整除性:不同的視角當面臨確定一個數字是否可以被另一個數字整除的任務時,許多開發人員本能地訴諸除法並檢查餘數。然而,這種方法可能會導致陷阱,特別是在 Python 對除法的不同解釋的情況下。 在 Python 2.x 中,預設行為是整數除法,它會丟棄餘數。這意味著除法運算子將始終產...
    程式設計 發佈於2024-11-23
  • 如何在沒有泛型的 Go 中實作泛型錯誤處理?
    如何在沒有泛型的 Go 中實作泛型錯誤處理?
    在 Go 中實現通用錯誤處理Go 缺乏通用功能,這在嘗試泛化功能時帶來了挑戰。一個常見的場景是需要一個適用於任何傳回值和錯誤的函數的通用錯誤處理函數。 提供的範例示範了使用空介面建立此類函數的嘗試:func P(any interface{}, err error) (interface{}) { ...
    程式設計 發佈於2024-11-23
  • 如何為圖示創建無盡的 CSS 旋轉動畫?
    如何為圖示創建無盡的 CSS 旋轉動畫?
    無盡的CSS旋轉動畫:如何連續旋轉圖標使用CSS實現圖標的無限旋轉,CSS動畫的組合並且需要關鍵幀。以下步驟概述了解決方案:1。加入關鍵幀:我們定義兩個關鍵幀,一個用於旋轉的開始(0 度),一個用於結束(360 度)。這確保了平滑過渡。 @-webkit-keyframes rotating /* ...
    程式設計 發佈於2024-11-23
  • 泛型如何增強Java程式碼的可重複使用性和效率?
    泛型如何增強Java程式碼的可重複使用性和效率?
    揭秘Java 中的泛型:揭示其真實本質和應用雖然泛型的概念最初可能看起來難以捉摸,但了解其目的和實現可以顯著提高您的Java 程式設計技能。泛型可讓您建立可操作各種資料類型的適應性程式碼元件,而無需進行類型轉換或明確資料類型聲明。 泛型有什麼作用? 泛型本質上充當您可以在定義類別或方法時指定的類型參...
    程式設計 發佈於2024-11-23

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

Copyright© 2022 湘ICP备2022001581号-3