돌아가기

프라미스: then vs. catch

아래 두 코드 조각을 보세요. 두 코드는 동일하게 동작할까요? 모든 상황을 고려하여 두 코드 조각이 동일하게 동작할지 아닐지를 판단해 보세요.

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

비교하기

promise.then(f1, f2);

답은 ** “같지 않다” **입니다.

f1에서 에러가 발생하면 아래 코드에서는 .catch에서 에러가 처리됩니다.

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

하지만 아래 코드에선 f1에서 발생한 에러를 처리하지 못합니다.

promise
  .then(f1, f2);

then 핸들러에서 에러가 발생하면 체인 아래로 전달됩니다. 위 코드에는 f1 아래에 이어지는 체인이 없네요.

.then은 결과나 에러를 다음 .then이나 catch에 전달합니다. 첫 번째 코드 조각엔 catch가 있지만 두 번째 코드 조각엔 이어지는 체인이 전혀 없기 때문에 에러가 발생한 경우 이 에러를 처리하지 못한다는 차이가 생깁니다.