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 Standard
# handler-workerglobalscope-onunhandledrejection

ブラウザーの互換性

BCD tables only load in the browser

関連情報