レッスンに戻る

Promise: then vs catch

これらのコードは等しいでしょうか?言い換えると、それらはどんな状況でも任意のハンドラ関数に対して、同じように振る舞いますか?

promise.then(f1, f2);

Versus;

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

解答: いいえ、それらは等しくありません:

違いですが、以下では f1 でエラーが発生したとき、.catch で処理されます:

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

…しかしここでは違います:

promise
  .then(f1, f2);

なぜならエラーはチェーンを下に進み、2番目のコードは f1 の下のチェーンにはないためです。

つまり、.then は次の .then/catch へ結果/エラーを渡します。そのため、最初の例では下に catch があり、2つ目の例は – ありません。なので、エラーは処理されません。