[Promise] catch가 여러 개인 경우 어떻게될까?

Dev_sheep·2025년 4월 27일
  • then, catch가 중첩되면 어떻게 될지 판단해보자.
  • Promise(비동기처리를 간편하게 해주는 객체)

GPT 예시를 참고한다.

[ 연속해서 then, catch쓴 경우 ]

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);
  });
  • 위의 경우 2단계에서 에러가 났으니 catch문으로 이동하여 에러를 발생시킨다.
  • 그 이후 3단계 데이터는 진행하지 않는다.

[ 중첩되는 경우 ]

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단계에서 매개변수로 받는 result3undefined가 나온다.

profile
기록과 공유

0개의 댓글