このページはコミュニティーの尽力で英語から翻訳されました。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 イベントにバブリングを許すと、結局はコンソールにエラーメッセージを出力することになります。 これは PromiseRejectionEventpreventDefault() を呼び出すことで防ぐことができます。 例は以下の 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();
});

仕様書

Specification
HTML
# event-unhandledrejection
HTML
# handler-window-onunhandledrejection

ブラウザーの互換性

関連情報