返回課程

Promise:then 與 catch

這些程式碼片段是否相等?換句話說,它們在任何情況下、對於任何處理函式,是否都會以相同的方式運作?

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

相較於

promise.then(f1, f2);

簡短的回答是:不,它們不相等

差異在於,如果 f1 發生錯誤,則會在此處由 .catch 處理

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

…但在此處不會

promise
  .then(f1, f2);

這是因為錯誤會沿著串接傳遞,而在第二個程式碼片段中,f1 下方沒有串接。

換句話說,.then 將結果/錯誤傳遞給下一個 .then/catch。因此在第一個範例中,下方有一個 catch,而在第二個範例中沒有,因此錯誤未處理。