[JavaScript] Promise Error Handling

2021. 5. 12. 16:33Programming Languages/JavaScript

프로미스는 콜백의 에러 처리 문제를 후속 메서드 catch를 통해 해결했습니다.

new Promise((resolve, reject) => {
  throw new Error("에러 발생");
})
  .then((resolve) => console.log(resolve))
  .catch((err) => console.error(err)); // "에러 발생"

앞서 살펴본 바와 같이 catch 메서드는 then(undefined, reject)와 같아 다음과 같이 사용할 수 있습니다.

new Promise((resolve, reject) => {
  throw new Error("에러 발생");
})
  .then((resolve) => console.log(resolve))
  .then((_, err) => console.error(err)); // "에러 발생"

하지만 catch 메서드를 사용하는 것이 바람직합니다. 다음과 같은 문제가 발생할 수도 있기 때문입니다.

new Promise((resolve, reject) => {
  // 정상 코드
})
  .then((resolve) => console.logg(resolve),
  // 에러 발생! 하지만 reject에서 잡지 못함
  (reject) => console.error(reject));

위와 같이 then의 두 번째 콜백 함수로 에러를 처리하면 첫 번째 콜백 함수의 에러를 잡지 못합니다. 이에 따라 코드가 복잡해지고 가독성도 나빠지는 결과를 낳게 됩니다. 따라서 catch 메서드를 사용하는 방법이 효율적입니다.

catch를 사용하면 앞서 체이닝된 모든 then의 에러를 catch에서 잡을 수 있습니다.

new Promise((resolve, reject) => {
  // ... 
})
  .then((resolve, reject) => { ... })
  .then((resolve, reject) => { ... }) // 에러 발생!!
  .then((resolve, reject) => { ... })
  .catch((err) => { console.error(err); }) // 에러 캐치!

'Programming Languages > JavaScript' 카테고리의 다른 글

[JavaScript] Promise Static Method  (0) 2021.05.12
[JavaScript] Promise  (0) 2021.05.12
[JavaScript] 가비지 컬렉션  (0) 2020.08.17
[JavaScript] 객체 복사  (0) 2020.08.12
[JavaScript] 객체  (0) 2020.08.11