レッスンに戻る

Promise: then と catch

これらのコードフラグメントは等しいですか?言い換えると、どんな状況やどんなハンドラ関数でも同じように動作しますか?

promise.then(f1).catch(f2);

promise.then(f1, f2);

簡単な答えはノー、等しくありませんです。

違いは、f1でエラーが発生した場合、ここで.catchで処理されることです。

promise
  .then(f1)
  .catch(f2);

…しかし、ここでではありません

promise
  .then(f1, f2);

それは、エラーがチェーンに渡され、2番目のコードピースではf1の下にチェーンがないためです。

言い換えると、.thenは結果またはエラーを次の.then/catchに渡します。したがって、最初の例では下にcatchがあり、2番目の例ではありませんので、エラーは処理されません。