Window: unhandledrejection イベント
unhandledrejection イベントは、 JavaScript の拒否ハンドラーを持たない Promise が拒否されたときにスクリプトのグローバルスコープに送られます。 通常、これは window ですが、Worker であることもあります。
これはデバッグや、予期しない場面でのエラーハンドリングのエラーの代替手段を提供するために利用することができます。
構文
このイベント名を addEventListener() のようなメソッドで使用するか、イベントハンドラープロパティを設定するかしてください。
addEventListener("unhandledrejection", (event) => { })
onunhandledrejection = (event) => { }
イベント型
PromiseRejectionEvent です。 Event を継承しています。
イベントプロパティ
PromiseRejectionEvent.promise読取専用-
拒否された JavaScript の
Promiseです。 PromiseRejectionEvent.reason読取専用-
プロミスが拒否された理由を示す値または
Objectであり、Promise.reject()に渡されたままのものです。
イベントハンドラーの別名
Window インターフェイスに加え、イベントハンドラープロパティ onunhandledrejection は、以下のターゲットでも利用可能です。
使用上のメモ
unhandledrejection イベントにバブリングを許すと、結局はコンソールにエラーメッセージを出力することになります。 これは PromiseRejectionEvent の preventDefault() を呼び出すことで防ぐことができます。 例は以下の Preventing default handling を参照してください。
このイベントはデータ漏洩が起こる可能性があるため、オリジンを越えるスクリプトに起因する Promise が拒否されても、このイベントは発生しません。
例
>基本的なエラーのログ
この例では、処理されなかったプロミスの拒否についての情報をコンソールにログ出力します。
window.addEventListener("unhandledrejection", (event) => {
console.warn(`プロミスの拒否が処理されませんでした: ${event.reason}`);
});
イベントハンドラープロパティを使用して、イベントリスナーを設定することもできます。
window.onunhandledrejection = (event) => {
console.warn(`プロミスの拒否が処理されませんでした: ${event.reason}`);
};
デフォルトの処理の防止
(Node.js など)多くの環境では、デフォルトではプロミスが処理されないとコンソールに報告されます。 unhandledrejection イベントのハンドラー — と、さらに実行したいその他のタスク — を追加して、 preventDefault() を呼び出すことでイベントをキャンセルし、実行時のログ出力コードが扱われるまでバブリングすることを防ぐことができます。 これは unhandledrejection がキャンセル可能であるためです。
window.addEventListener("unhandledrejection", (event) => {
// 処理されていない拒否を処理するコード
// …
// デフォルトの処理(コンソールへのエラー出力など)を無効にする
event.preventDefault();
});
仕様書
| Specification |
|---|
| HTML> # event-unhandledrejection> |
| HTML> # handler-window-onunhandledrejection> |