WorkerGlobalScope: unhandledrejection イベント
Baseline
広く利用可能
この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2020年7月以降、すべてのブラウザーで利用可能です。
unhandledrejection イベントは、スクリプトのグローバルスコープ(通常は WorkerGlobalScope)に送られるものであり、拒否ハンドラーのない Promise が拒否されたときに発行されます。
これはデバッグや、予期せぬ状況でのフォールバックエラー処理を提供するのに有益です。
構文
このイベント名を addEventListener() などのメソッドで使用するか、イベントハンドラープロパティを設定するかしてください。
js
self.addEventListener("unhandledrejection", (event) => {});
self.onunhandledrejection = (event) => {};
イベント型
PromiseRejectionEvent です。 Event から継承しています。
イベントプロパティ
PromiseRejectionEvent.promise読取専用-
拒否されたプロミス (
Promise) です。 PromiseRejectionEvent.reason読取専用-
プロミスが拒否された理由を示す値または
Objectで、Promise.reject()に渡されたものです。
例
>基本的なエラーログ出力
この例は、未処理のプロミスの拒否に関する情報をコンソールにログ出力します。
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 など)では、既定では処理されなかったプロミスの拒否をコンソールに報告します。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> |