Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
catch() は Promise インスタンスのメソッドで、プロミスが拒否されたときに呼び出される関数をスケジュールします。これは即座に同等の Promise オブジェクトを返すので、他のプロミスのメソッドを連鎖して呼び出すことができます。これは then(undefined, onRejected) の省略形です。
このプロミスが拒否されたときに非同期的に実行される関数。その返値は、catch() によって返されるプロミスの履行値になります。この関数は、次の引数で呼び出されます。
reasonプロミスが拒否された値。
新しい Promise を返します。この新しいプロミスは、現在のプロミスの状態に関係なく、返すときには常に待機状態です。 onRejected が呼び出された場合、返されたプロミスは、この呼び出しの返値に基づいて解決されるか、この呼び出しから発生したエラーで拒否されます。現在のプロミスが履行された場合、 onRejected は呼び出されず、返されたプロミスは同じ値で履行されます。
catch メソッドは複合したプロミスの複合のエラー処理に使用されます。これは Promise を返すので、姉妹メソッドである then() と同様の方法で連鎖が可能です。
もしプロミスが拒否され、呼び出すべき拒否ハンドラーがない場合(ハンドラーは then(), catch(), finally() のいずれかを通して装着されます)、拒否イベントはホストから表面化されます。ブラウザーでは、これは unhandledrejection イベントとして発生します。もし、拒否されたプロミスにハンドラーが装着され、その拒否がすでに unhandledrejection イベントを発生していた場合、別の rejectionhandled イベントが発行されます。
catch() は内部的に、呼び出されたオブジェクトに対して then() を呼び出し、引数として undefined と onRejected を渡します。その呼び出された値がそのまま返されます。これは、メソッドをラップすればオブザーバーで監視することができます。
つまり、undefined を渡しても、返されたプロミスは拒否されるため、最終的にプロミスが拒否されないようにするための関数を渡さなければなりません。
catch() は then() を呼び出すだけなので、サブクラス化に対応しています。
メモ: 下記の例では、Error のインスタンスを例外として発生させています。同期 throw 文と同様、これは良い習慣と考えられています。さもなければ、捕捉を行う部分は引数が文字列かエラーかを調べる必要があり、スタックトレースのような貴重な情報を失う可能性があります。
エラーが発生すると、たいていの場合 catch() メソッドが呼び出されます。
非同期関数内で発生したエラーは、捕捉されないエラーとして扱われます。
resolve が呼び出された後に発生したエラーは無視されます。
| ECMAScript® 2027 Language Specification # sec-promise.prototype.catch |
Enable JavaScript to view this browser compatibility table.
This page was last modified on 2025年8月21日 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.