」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何處理不在 Promise 範圍內的非同步回呼中的錯誤?

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

發佈於2024-11-04
瀏覽:698

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

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

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

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

Promises 中的異常處理

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

function getPromise() {
  return new Promise(function(done, reject) {
    setTimeout(done, 500);
  }).then(function() {
    console.log("hihihihi");
    throw new Error("Oh no!");
  });
}

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

非同步回呼的注意事項

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

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

流氓非同步回調處理範例

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

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

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

最新教學 更多>

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

Copyright© 2022 湘ICP备2022001581号-3