며칠 전 try catch
문을 사용하다보니 다음과 같은 구조가 나온 적이 있었다.
try {
try {
try {
// 실패할 비동기 함수
}catch(error) {}
}catch (error) {}
}catch(error){}
async function
들을 많이 사용하면서 내부에서 요청이 실패한 경우에 대한 예외 처리를 try catch
로 했었는데,
비동기 함수 내부에서 다른 비동기 함수를 호출하다 보니 이렇게 된 것 같다.
처음엔 가장 안쪽의 요청이 실패하면 요청 실패가 스코프처럼 바깥으로 타고 올라가서 가장 바깥의 catch
의 로직만 실행될 거라 생각했었다.
직접 예제 코드를 만들어 돌려보니 예상과 다른 걸 확인할 수 있었다.
2중으로 중첩되어있는 try catch
구문에서 내부의 요청이 실패해 내부의 catch
가 그 즉시 실행되고, 외부의 catch
구문은 실행되지 않는다.
번외로, 중첩된 구문 중에 finally 구문이 있다면 전부 실행된다.