このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

Window: unhandledrejection イベント

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

これはデバッグや、予期しない場面でのエラーハンドリングのエラーの代替手段を提供するために利用することができます。

構文

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

js
addEventListener("unhandledrejection", (event) => { })

onunhandledrejection = (event) => { }

イベント型

PromiseRejectionEvent です。 Event を継承しています。

Event PromiseRejectionEvent

イベントプロパティ

PromiseRejectionEvent.promise 読取専用

拒否された JavaScript の Promise です。

PromiseRejectionEvent.reason 読取専用

プロミスが拒否された理由を示す値または Object であり、Promise.reject() に渡されたままのものです。

イベントハンドラーの別名

Window インターフェイスに加え、イベントハンドラープロパティ onunhandledrejection は、以下のターゲットでも利用可能です。

使用上のメモ

unhandledrejection イベントにバブリングを許すと、結局はコンソールにエラーメッセージを出力することになります。 これは PromiseRejectionEvent の preventDefault() を呼び出すことで防ぐことができます。 例は以下の Preventing default handling を参照してください。

このイベントはデータ漏洩が起こる可能性があるため、オリジンを越えるスクリプトに起因する Promise が拒否されても、このイベントは発生しません。

例

基本的なエラーのログ

この例では、処理されなかったプロミスの拒否についての情報をコンソールにログ出力します。

js
window.addEventListener("unhandledrejection", (event) => {
  console.warn(`プロミスの拒否が処理されませんでした: ${event.reason}`);
});

イベントハンドラープロパティを使用して、イベントリスナーを設定することもできます。

js
window.onunhandledrejection = (event) => {
  console.warn(`プロミスの拒否が処理されませんでした: ${event.reason}`);
};

デフォルトの処理の防止

(Node.js など)多くの環境では、デフォルトではプロミスが処理されないとコンソールに報告されます。 unhandledrejection イベントのハンドラー — と、さらに実行したいその他のタスク — を追加して、 preventDefault() を呼び出すことでイベントをキャンセルし、実行時のログ出力コードが扱われるまでバブリングすることを防ぐことができます。 これは unhandledrejection がキャンセル可能であるためです。

js
window.addEventListener("unhandledrejection", (event) => {
  // 処理されていない拒否を処理するコード
  // …

  // デフォルトの処理(コンソールへのエラー出力など)を無効にする

  event.preventDefault();
});

仕様書

仕様書
HTML
# event-unhandledrejection
HTML
# handler-window-onunhandledrejection

ブラウザーの互換性

関連情報