UnhandledPromiseRejection: Promise rejection was not handled
Promiseがrejectされたが.catchで処理されなかった場合のエラー
概要
Promiseがrejectされたにもかかわらず、.catch()やtry-catchで処理されなかった場合に発生するエラーです。Node.js 15以降ではプロセスがクラッシュします。
エラーメッセージ
UnhandledPromiseRejectionWarning: Unhandled promise rejection
UnhandledPromiseRejection: This error originated either by throwing inside of an async function without a catch block
原因
- catchの付け忘れ: Promiseに
.catch()を付けていない - async関数のtry-catch不足: async関数内でawaitしたPromiseのエラーを捕捉していない
- Promise.allの一部失敗: 複数のPromiseのうち1つが失敗した
- イベントリスナー内のPromise: イベントハンドラ内でawaitしたPromiseのエラー
解決策
1. .catch()を追加
| |
2. async/awaitでtry-catch
| |
3. Promise.allSettledを使用
| |
4. グローバルハンドラの設定
| |
5. イベントハンドラでの対処
| |
6. Express.jsでのエラーハンドリング
| |
よくある間違い
.then().then().catch()で途中のthenでエラーが発生してもcatchで捕捉されると誤解- async関数を呼び出す側でエラーハンドリングを忘れる
Promise.allで1つの失敗が全体に影響することを見落とす
関連エラー
参考リンク
JavaScript の他のエラー
この記事は役に立ちましたか?