WorkerGlobalScope:unhandledrejection 事件

Baseline 已廣泛支援

此特性已經十分成熟,可在許多裝置和瀏覽器版本上使用。自 2020 年 7 月以來,它已在各大瀏覽器中可用。

注意:此功能僅在 Web Workers 中可用。

當一個沒有拒絕處理程式的 Promise 被拒絕時,會將 unhandledrejection 事件傳送到指令碼的全域性作用域(通常是 WorkerGlobalScope)。

這對於除錯和為意外情況提供備用錯誤處理非常有用。

語法

在諸如 addEventListener() 之類的方法中使用事件名稱,或設定事件處理程式屬性。

js
addEventListener("unhandledrejection", (event) => { })

onunhandledrejection = (event) => { }

事件型別

一個 PromiseRejectionEvent。繼承自 Event

Event PromiseRejectionEvent

事件屬性

PromiseRejectionEvent.promise 只讀

被拒絕的 JavaScript Promise

PromiseRejectionEvent.reason 只讀

一個值或 Object,指示 Promise 被拒絕的原因,與傳遞給 Promise.reject() 的值相同。

示例

基本錯誤日誌記錄

此示例將有關未處理的 Promise 拒絕的資訊記錄到控制檯。

js
self.addEventListener("unhandledrejection", (event) => {
  console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`);
});

您還可以使用 onunhandledrejection 事件處理程式屬性來設定事件監聽器。

js
self.onunhandledrejection = (event) => {
  console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`);
};

阻止預設處理

許多環境(例如 Node.js)預設會向控制檯報告未處理的 Promise 拒絕。您可以透過新增一個 unhandledrejection 事件的處理器來阻止這種情況發生。該處理器除了執行您希望執行的其他任何任務外,還會呼叫 preventDefault() 來取消事件,阻止其冒泡到執行時日誌記錄程式碼進行處理。這是有效的,因為 unhandledrejection 是可取消的。

js
self.addEventListener("unhandledrejection", (event) => {
  // code for handling the unhandled rejection
  // …

  // Prevent the default handling (such as outputting the
  // error to the console)

  event.preventDefault();
});

規範

規範
HTML
# handler-workerglobalscope-onunhandledrejection

瀏覽器相容性

另見