首頁 >web前端 >js教程 >如何處理不在 Promise 範圍內的非同步回呼中的錯誤?

如何處理不在 Promise 範圍內的非同步回呼中的錯誤?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-26 10:06:02903瀏覽

How Can You Handle Errors in Asynchronous Callbacks That Are Not Within a Promise's Scope?

使用 Promise 鏈進行非同步錯誤處理

使用非同步程式碼時,考慮如何有效處理錯誤至關重要。未捕獲的異常可能會使您的應用程式崩潰,因此制定適當的策略非常重要。

在所描述的場景中,使用拋出錯誤的 setTimeout 來建立 Promise。 Bluebird Promise 的 catch 處理程序不會捕獲此錯誤,因為它發生在非同步回呼中。

Promises 中的異常處理

Promises 可以捕獲在其中拋出的異常他們自己的回調函數。要處理此類錯誤,您可以:

<code class="javascript">function getPromise() {
  return new Promise(function(done, reject) {
    setTimeout(done, 500);
  }).then(function() {
    console.log("hihihihi");
    throw new Error("Oh no!");
  });
}</code>

這裡,錯誤在 then 回調中拋出,這確保它會被 Promise 的 catch 處理程序捕獲。

非同步回調的注意事項

記住 Promise 不會捕獲不在其自身權限範圍內的非同步回調的異常,這一點至關重要。要處理這些類型的錯誤,請考慮:

  1. 使用 Promise.delay:Promise.delay 包裝非同步回呼以返回 Promise。回調中拋出的任何錯誤都會被 Promise 捕捉。
  2. 拒絕周圍的 Promise:只要有可能,拒絕非同步回調周圍的 Promise,而不是拋出異常。

流氓異步回調的處理範例

要在Node.js 或瀏覽器中處理流氓異步回調,您可以使用以下方法:

<code class="javascript">function getPromise() {
  return new Promise(function(done, reject) {
    setTimeout(function() {
      try {
        // Your rogue async callback here
        console.log("hihihihi");
      } catch (e) {
        reject(e);
      }
    }, 500);
  });
}</code>

透過手動處理回呼中的任何異常,此方法可確保它們不會使您的應用程式崩潰。

以上是如何處理不在 Promise 範圍內的非同步回呼中的錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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