try catch가 중첩되면 무슨 일이 일어날까

민겸·2023년 7월 27일
0

JavaScript

목록 보기
20/20

며칠 전 try catch문을 사용하다보니 다음과 같은 구조가 나온 적이 있었다.

try {
  try {
    try {
      // 실패할 비동기 함수
    }catch(error) {}
  }catch (error) {}
}catch(error){}

async function들을 많이 사용하면서 내부에서 요청이 실패한 경우에 대한 예외 처리를 try catch로 했었는데,

비동기 함수 내부에서 다른 비동기 함수를 호출하다 보니 이렇게 된 것 같다.

처음엔 가장 안쪽의 요청이 실패하면 요청 실패가 스코프처럼 바깥으로 타고 올라가서 가장 바깥의 catch의 로직만 실행될 거라 생각했었다.

직접 예제 코드를 만들어 돌려보니 예상과 다른 걸 확인할 수 있었다.

2중으로 중첩되어있는 try catch 구문에서 내부의 요청이 실패해 내부의 catch가 그 즉시 실행되고, 외부의 catch 구문은 실행되지 않는다.

번외로, 중첩된 구문 중에 finally 구문이 있다면 전부 실행된다.

profile
기술부채상환중...

0개의 댓글