WorkerGlobalScope: unhandledrejection イベント

unhandledrejection イベントは、スクリプトのグローバルスコープ(通常は WorkerGlobalScope)に送られるものであり、拒否ハンドラーのない Promise が拒否されたときに発行されます。

これはデバッグや、予期せぬ状況でのフォールバックエラー処理を提供するのに有益です。

構文

このイベント名を addEventListener() などのメソッドで使用するか、イベントハンドラープロパティを設定するかしてください。

js
self.addEventListener("unhandledrejection", (event) => {});
self.onunhandledrejection = (event) => {};

イベント型

PromiseRejectionEvent です。 Event から継承しています。

Event PromiseRejectionEvent

イベントプロパティ

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();
});

仕様書

Specification
HTML
# handler-workerglobalscope-onunhandledrejection

ブラウザーの互換性

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
unhandledrejection event

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

関連情報