GPT 예시를 참고한다.
Promise.resolve('start')
.then((r1) => {
console.log('1단계:', r1);
return '2단계 데이터';
})
.then((r2) => {
console.log('2단계:', r2);
// 여기서 에러 발생
throw new Error('2단계 에러!');
return '3단계 데이터';
})
.then((r3) => {
console.log('3단계:', r3);
.catch((err) => {
console.error('잡은 에러:', err.message);
});
Promise.resolve('시작')
.then((result1) => {
console.log('1단계:', result1);
return Promise.resolve('2단계 데이터');
})
.then((result2) => {
console.log('2단계:', result2);
return Promise.resolve('3단계 데이터')
.then((innerResult) => {
console.log('3단계(안쪽):', innerResult);
// 여기서 에러를 발생시켜볼게
throw new Error('3단계에서 문제 발생!');
});
})
.then((result3) => {
console.log('4단계:', result3);
return '4단계 완료';
})
.catch((err) => {
console.error('에러를 잡았다!', err.message);
});
이 경우에는 throw new Error('3단계에서 문제 발생!');에서 발생이 되는데, 여기서 가까운 catch문으로 이동하여 "에러를 잡았다! 3단계에서 문제 발생!" 출력
마찬가지로 4단계 then은 실행을 안한다.
추가적으로 return을 안해주면 then이 이어지면서 진행은 되나 매개변수에 전달되는 값은 undefined로 처리된다.
.then((result2) => {
console.log('2단계:', result2);
return Promise.resolve('3단계 데이터')
.then((innerResult) => {
console.log('3단계(안쪽):', innerResult);
throw new Error('3단계에서 문제 발생!');
})
.catch(() => { // <<< 3단계 catch
console.log('error!');
});
})
이렇게 중첩된 내부 안에서도 catch가 있으면 그 이후 4단계도 진행한다.
다만, 4단계에서 매개변수로 받는 result3는 undefined가 나온다.