Skip to Content
Suffering builds character
아카이브3.Callback,PromiseCallback9. 해결 방법 및 한계

9. 해결 방법 및 한계

Q. 해결 방법?

→ try-catch 블록을 콜백 안에서 사용하도록 변경

example.js
setTimeout(() => { try { throw new Error("에러 발생!"); } catch (e) { console.error("콜백 내부에서 잡음:", e.message); } }, 0);

실행 결과

콜백 내부에서 잡음: 에러 발생!

위 해당 방식의 단점

example.js 예시처럼 구조가 복잡하지 않은 단일 콜백에서는 크게 문제 없음
하지만 콜백이 중첩되거나 연결되는 경우에는, 에러 처리 구조가 흩어지게 되어 관리가 복잡해짐

이 구조에서 콜백마다 try-catch를 쓰면 코드가 훨씬 더 복잡해지고, 가독성이 저하됨
또한 바깥 catch는 안쪽(Line 13)에서 발생한 예외를 받지 못함

✔ 안쪽에서 발생한 예외를 받아야 하는 경우
해당 기능 전체에 대해 어디서 에러가 발생하든 한 곳에서 공통적으로 처리하거나,
처리 완료 로직이나 재시도 로직 등을 한 번만 수행하고 싶을 때

complicated.js
// 1단계 비동기 처리 setTimeout(() => { try { console.log('1단계 진입'); // 2단계 비동기 처리 (1단계 안쪽) setTimeout(() => { try { console.log('2단계 진입'); // 여기서 예외 발생 throw new Error('2단계에서 에러 발생!'); } catch (e) { console.error('안쪽(2단계) 콜백에서 에러가 잡힘:', e.message); } }, 0); } catch (e) { // 이 catch는 2단계에서 throw된 에러를 못 잡음 console.log('바깥(1단계) 콜백에서 잡힘:', e.message); } }, 0);

실행 결과

1단계 진입
2단계 진입
안쪽(2단계) 콜백에서 잡힘: 2단계에서 에러 발생!

바깥(1단계) 콜백에서 잡힘(출력되지 않음)

Callback에 try-catch를 사용했을 때의 단점 요약

  • 콜백 내부에 try-catch를 넣으면 해당 콜백 내의 에러는 잡을 수 있음

  • 단일 콜백 구조 내에서는 큰 문제가 없을 수 있음

  • 2개 이상의 콜백이 중첩되어 작성되는 경우, 각 콜백마다 개별적인 에러 핸들링이 필요

  • 중첩된 콜백에서는 에러가 분산되고, 코드 흐름이 중첩되어 가독성, 디버깅이 어려워짐
    → 단순히 try-catch로 못 잡는다는 문제 하나만 있는 것이 아닌 것

Last updated on