WorkerGlobalScope: unhandledrejection イベント
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
unhandledrejection
イベントは、スクリプトのグローバルスコープ(通常は WorkerGlobalScope
)に送られるものであり、拒否ハンドラーのない Promise
が拒否されたときに発行されます。
これはデバッグや、予期せぬ状況でのフォールバックエラー処理を提供するのに有益です。
構文
このイベント名を addEventListener()
などのメソッドで使用するか、イベントハンドラープロパティを設定するかしてください。
self.addEventListener("unhandledrejection", (event) => {});
self.onunhandledrejection = (event) => {};
イベント型
PromiseRejectionEvent
です。 Event
から継承しています。
イベントプロパティ
PromiseRejectionEvent.promise
読取専用-
拒否されたプロミス (
Promise
) です。 PromiseRejectionEvent.reason
読取専用-
プロミスが拒否された理由を示す値または
Object
で、Promise.reject()
に渡されたものです。
例
基本的なエラーログ出力
この例は、未処理のプロミスの拒否に関する情報をコンソールにログ出力します。
self.addEventListener("unhandledrejection", (event) => {
console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`);
});
また、onunhandledrejection
イベントハンドラープロパティを使用して、イベントリスナーを設定することができます。
self.onunhandledrejection = (event) => {
console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`);
};
既定の処理を防止
多くの環境(Node.js など)では、既定では処理されなかったプロミスの拒否をコンソールに報告します。unhandledrejection
イベントのハンドラーを追加することで、そこでイベントをキャンセルする preventDefault()
を呼び出すことで、ランタイムのログ出力コードで処理されるのを防ぐことができます。これは unhandledrejection
がキャンセル可能であるため、うまく動作します。
self.addEventListener("unhandledrejection", (event) => {
// code for handling the unhandled rejection
// …
// Prevent the default handling (such as outputting the
// error to the console)
event.preventDefault();
});
仕様書
Specification |
---|
HTML # handler-workerglobalscope-onunhandledrejection |