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() などのメソッドで使用するか、イベントハンドラープロパティを設定するかしてください。

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

ブラウザーの互換性

関連情報