」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 何時在 JavaScript Promise 中使用 Promise.reject 與 Throw?

何時在 JavaScript Promise 中使用 Promise.reject 與 Throw?

發佈於2024-11-08
瀏覽:409

When to Use Promise.reject vs. Throw in JavaScript Promises?

JavaScript Promise:Reject 與Throw 之謎

使用JavaScript Promise 時,開發人員經常面臨一個困境:他們是否應該使用Promise . reject 或者只是拋出一個錯誤?雖然這兩種方法具有相似的目的,但關於它們的差異和潛在優勢仍然存在混淆。

探索相似之處

最終,使用 Promise.reject 沒有固有的優勢過度拋出錯誤,反之亦然。兩種機制都將 Promise 設定為拒絕狀態並觸發 .catch 或 catch() 處理程序的執行。

揭示了微妙的區別

但是,具體情況存在拋出錯誤不足的地方:承諾回調之外的非同步回調。在這些情況下,Promise.reject 是讓 Promise 鏈知道拒絕狀態的唯一選項。

考慮以下範例:

new Promise(function() {
  setTimeout(function() {
    throw 'or nah';
    // Using Promise.reject('or nah') also won't work in this case
  }, 1000);
}).catch(function(e) {
  console.log(e); // doesn't happen
});

在這種情況下,setTimeout 回調中拋出的錯誤不會被 .catch 處理程序捕獲,因為它不是在 Promise 回調中執行。為了有效地處理這種情況,必須在非同步回調中使用 Promise.reject。

選擇最佳實踐

一般來說,要么 Promise.reject 要么拋出錯誤可用於將承諾設置為拒絕狀態。然而,當在 Promise 回呼之外使用非同步回呼時,Promise.reject 成為唯一可行的選擇。

版本聲明 本文轉載於:1729683993如有侵犯,請洽[email protected]刪除
最新教學 更多>
  • 如何在 Rust 中合理地組織你的 Tauri 命令
    如何在 Rust 中合理地組織你的 Tauri 命令
    在建立 Tauri 應用程式時,保持程式碼庫井然有序非常重要,尤其是隨著專案的成長。相信我,作為一個對 Rust 比較陌生的人,我也遇到過不少混亂的情況——花幾個小時把自己從自己挖的坑裡挖出來。如果你跟我一樣,你就會想避免這種情況。那麼,讓我們討論一下如何透過將 Tauri 命令拆分為單獨的檔案來保...
    程式設計 發佈於2024-11-08
  • ## 如何在 Docker 映像中預先快取 Go 依賴項以加快建置速度?
    ## 如何在 Docker 映像中預先快取 Go 依賴項以加快建置速度?
    利用預先快取的依賴關係高效建置 Docker 映像建置 Docker 映像時,最大限度地減少建置時間至關重要。一種策略是快取相依性。然而,這需要先建立依賴項,這可能會很耗時。 有沒有辦法預先建立 go.mod 檔案中列出的多個依賴項? 答案在於利用 Docker 的快取機制。建議的 Dockerfi...
    程式設計 發佈於2024-11-08
  • 如何刪除重複行同時保留最舊的提交?
    如何刪除重複行同時保留最舊的提交?
    管理重複行:保留最舊的提交重複資料會顯著影響任何資料庫的完整性和可用性。在這種情況下,我們的目標是根據subscriberEmail欄位消除重複行,只保留原始提交。 為了在不訴諸表交換技術的情況下實現這一點,我們可以使用以下SQL查詢: delete x from myTable x join m...
    程式設計 發佈於2024-11-08
  • 如何處理MySQL表名中的特殊字元?
    如何處理MySQL表名中的特殊字元?
    處理MySQL表名中的特殊字符MySQL將某些字符保留為特殊字符,這些字符在不經意使用時可能會與表名發生衝突。在給定的場景中,表名「e!」中的感嘆號 (!)資料插入時發生錯誤。 為了解決這個問題,MySQL 允許在使用特殊字元時用反引號 (`) 將表名括起來。這有效地“轉義”了特殊字符,並允許將其識...
    程式設計 發佈於2024-11-08
  • 了解 JVM 鎖優化
    了解 JVM 鎖優化
    并发对于开发可以执行多个并发操作的健壮、可扩展的应用程序非常关键。然而,为此需要付出同步方面的代价。由于获取和释放锁的随之而来的开销,它会产生性能成本。为了减轻这些性能成本,JVM 中融入了多种优化,例如偏向锁定、锁定消除、锁定粗化以及轻量级和重量级锁定的概念。 在本文中,我们将更详细地了解这些优化...
    程式設計 發佈於2024-11-08
  • 測試驅動開發 (TDD):嚴格的軟體開發方法
    測試驅動開發 (TDD):嚴格的軟體開發方法
    定義 TDD 測試驅動開發(TDD)是一種軟體開發方法,強調在編寫生產程式碼之前編寫測試。這是一種嚴格的方法,透過測試推動開發,有助於確保高品質的程式碼。 理解 TDD TDD 是一個循環過程,涉及三個關鍵步驟: 紅色:編寫定義程式碼所需行為的失敗測試。此步驟有助於澄清需求並確保測試集中於期望...
    程式設計 發佈於2024-11-08
  • 介面
    介面
    在物件導向程式設計中,定義類別應該做什麼是有用的,但定義類別應該做什麼是有用的。 抽象方法定義了方法的簽章而不提供實現,子類別必須實作該方法。 Java 中的介面可讓您將應該做什麼的定義與如何做的實作完全分開。 介面可以指定沒有主體的方法,該方法必須由類別實作。 實作一個介面的類別的數量沒...
    程式設計 發佈於2024-11-08
  • 在GoClipse中調試Go程式時如何避免進入彙編程式碼?
    在GoClipse中調試Go程式時如何避免進入彙編程式碼?
    使用彙編程式碼在GoClipse 中偵錯Go 程式嘗試在GoClipse 中除錯Go 程式時,使用者可能會遇到偵錯器無法正常運行的問題單步執行彙編程式碼而不是Go 程式碼。儘管正確安裝了 gdb 進行調試,但還是會發生這種情況。 設定斷點並透過 Eclipse 偵錯器執行程式時,它會輸入「rt0_d...
    程式設計 發佈於2024-11-08
  • 在 JavaScript 產生數字範圍
    在 JavaScript 產生數字範圍
    產生一個整數數組,並用從起始數字開始到結束數字結束的連續值填入該數組。 解決方案 function range(start, end) { const rangeArray = Array.from( {length: Math.ceil(end - start 1...
    程式設計 發佈於2024-11-08
  • 為什麼我的 PHP Curl 腳本中會出現「CURL 錯誤:接收失敗:連線由對等方重置」錯誤?
    為什麼我的 PHP Curl 腳本中會出現「CURL 錯誤:接收失敗:連線由對等方重置」錯誤?
    CURL ERROR: Recv failure: Connection Reset by Peer - PHP Curl遇到「CURL ERROR: Recv failure: Connection Reset by PHP Curl 中的「peer」錯誤可能會令人困惑。 1. TCP/IP 問題...
    程式設計 發佈於2024-11-08
  • 如何使用 SimpleDateFormat 解析帶有「Z」文字的日期?
    如何使用 SimpleDateFormat 解析帶有「Z」文字的日期?
    在 SimpleDateFormat 日期解析中處理 'Z' 文字在日期解析領域,'Z' 文字具有特殊的意義。它用作指示指定時間使用 UTC 作為參考點的標記。然而,使用 SimpleDateFormat 解析帶有此文字的日期可能會對某些特定模式帶來挑戰。 如您所遇到...
    程式設計 發佈於2024-11-08
  • 檢索表單輸入時如何處理空 $_POST 值
    檢索表單輸入時如何處理空 $_POST 值
    檢查$_POST 空值透過$_POST 從表單檢索使用者輸入時,驗證該值是否為空至關重要空或為空。否則可能會導致意外行為或安全漏洞。 在提供的程式碼中,條件 if(!isset($_POST['userName'])) 檢查 'userName' 鍵是否存在於$_PO...
    程式設計 發佈於2024-11-08
  • 狀態與道具:掌握 React Native 應用程式中的資料流
    狀態與道具:掌握 React Native 應用程式中的資料流
    如果您是 React Native 或 React 新手,您一定会遇到过“state”和“props”这两个词。了解这两者对于开发动态且适应性强的移动应用程序至关重要。我们将在这篇博客文章中深入探讨 state 和 props,检查它们的差异,并学习如何有效处理 React Native 应用程序中...
    程式設計 發佈於2024-11-08
  • 即時 API 設計:Node.js 最佳實務(指南)
    即時 API 設計:Node.js 最佳實務(指南)
    Node.js 因其事件驱动架构和非阻塞 I/O 模型而成为构建实时 API 的流行选择。 根据最新的使用统计数据,全球有超过 1500 万开发者在使用 Node.js,其中 67% 的企业报告成功采用了该技术。 使用 Node.js 构建的实时 API 为各种应用程序提供支持,从实时聊天和协作工具...
    程式設計 發佈於2024-11-08
  • 使用 Kubernetes、Helm 和 Ingress 部署監控堆疊
    使用 Kubernetes、Helm 和 Ingress 部署監控堆疊
    觀察和管理 Kubernetes 叢集的效能對於維護應用程式運作狀況、識別問題和確保高可用性至關重要。我將引導您使用 kubectl 和 Helm 設定全面的監控解決方案,將 Grafana、Loki 和 Prometheus 部署到叢集,以及設定 Ingress 以進行外部存取。 我們將介紹以下...
    程式設計 發佈於2024-11-08

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

Copyright© 2022 湘ICP备2022001581号-3