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