프로미스는 콜백의 에러 처리 문제를 후속 메서드 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); }) // 에러 캐치!