Window: unhandledrejection 事件
當一個沒有拒絕處理程式的 JavaScript Promise 被拒絕時,unhandledrejection 事件會被髮送到指令碼的全域性作用域;通常是 window,但也可能是 Worker。
這對於除錯和為意外情況提供備用錯誤處理非常有用。
語法
在諸如 addEventListener() 之類的方法中使用事件名稱,或設定事件處理程式屬性。
addEventListener("unhandledrejection", (event) => { })
onunhandledrejection = (event) => { }
事件型別
一個 PromiseRejectionEvent。繼承自 Event。
事件屬性
PromiseRejectionEvent.promise只讀-
被拒絕的 JavaScript
Promise。 PromiseRejectionEvent.reason只讀-
一個值或
Object,指示 Promise 被拒絕的原因,與傳遞給Promise.reject()的值相同。
事件處理程式別名
除了 Window 介面之外,事件處理程式屬性 onunhandledrejection 也可在以下目標上使用
用法說明
允許 unhandledrejection 事件冒泡最終會導致錯誤訊息輸出到控制檯。你可以透過在 PromiseRejectionEvent 上呼叫 preventDefault() 來阻止這種情況發生;請參閱下面的阻止預設處理以獲取示例。
由於此事件可能會洩露資料,因此源自跨域指令碼的 Promise 拒絕不會觸發此事件。
示例
基本錯誤日誌記錄
此示例將有關未處理的 Promise 拒絕的資訊記錄到控制檯。
window.addEventListener("unhandledrejection", (event) => {
console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`);
});
你也可以使用 onunhandledrejection 事件處理程式屬性來設定事件監聽器
window.onunhandledrejection = (event) => {
console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`);
};
阻止預設處理
許多環境(例如 Node.js)預設會將未處理的 Promise 拒絕報告到控制檯。你可以透過為 unhandledrejection 事件新增處理程式來阻止這種情況發生,該處理程式除了執行你希望執行的任何其他任務之外,還會呼叫 preventDefault() 來取消事件,從而阻止其冒泡到執行時日誌記錄程式碼進行處理。這是因為 unhandledrejection 是可取消的。
window.addEventListener("unhandledrejection", (event) => {
// code for handling the unhandled rejection
// …
// Prevent the default handling (such as outputting the
// error to the console)
event.preventDefault();
});
規範
| 規範 |
|---|
| HTML # event-unhandledrejection |
| HTML # handler-window-onunhandledrejection |
瀏覽器相容性
載入中…