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つ目の例は – ありません。なので、エラーは処理されません。