대부분의 개발자들은 애플리케이션이 에러로 인해 중단되는 것을 방지하기 위해 습관적으로 try-catch문을 작성합니다. 하지만 JavaScript에서는 try-catch문으로 잡을 수 없는 예외가 존재합니다.
이번 포스팅에서는 JavaScript에서 try-catch문으로 잡을 수 없는 예외가 무엇인지 설명합니다.
구문 오류(SyntaxError)
구문 오류(SyntaxError)는 코드가 실행 중이 아니라 구문이 분석되는 동안 발생하는 에러입니다. 그러므로 try-catch문으로 구문 오류를 처리할 수 없습니다.
다음은 구문 오류(SyntaxError)를 catch 못하는 예제입니다.
errorFunc = function() {
try {
a.[];
} catch(e) {
console.log('error : ' + e);
}
}
errorFunc();
실행 결과
a.[]
는 유효한 구문이 아니므로 구문 분석 단계에서 예외가 발생합니다.
비동기 코드에서 예외
다음 코드의 try-catch문은 setTimeout()
함수의 콜백 함수가 호출될 때 종료되므로 비동기식 콜백 함수에서 발생한 예외를 catch 할 수 없습니다.
errorFunc = function() {
try {
setTimeout(()=>{
throw new Error('비동기 오류');
}, 1000)
} catch(e) {
console.log('오류: ', e);
}
}
errorFunc();
실행 결과
setTimeout()
함수의 콜백 함수에서 발생한 예외를 catch 하기 위해서는 setTimeout()
함수 내부에 try-catch문을 작성합니다.
errorFunc = function() {
setTimeout(()=>{
try {
throw new Error('비동기 오류');
} catch(e) {
console.log('오류: ', e);
}
}, 1000)
}
errorFunc();
실행 결과
Promise 예외
Promise 객체 내에서 발생한 모든 동기 또는 비동기 예외는 Promise 객체 내부의 Promise.prototype.catch
로 catch 됩니다. Promise 객체 외부에서는 Promise 객체 내에서 발생한 예외를 catch 할 수 없습니다.
▶ try-catch문으로 catch 못하는 예제 1
errorFunc = function() {
try {
new Promise((resolve, reject) => {
throw new Error('Promise 오류')
})
} catch(e) {
console.log('오류', e);
}
}
errorFunc();
▶ try-catch문으로 catch 못하는 예제 2
errorFunc = function() {
try {
new Promise((resolve, reject) => {
setTimeout(() => {
throw new Error('Promise 오류')
}, 1000)
})
} catch(e) {
console.log('오류', e);
}
}
errorFunc();
▶ Promise 객체 내부의 catch문 사용
errorFunc = function() {
try {
new Promise((resolve, reject) => {
throw new Error('Promise 오류')
}).catch((error) => {
console.log('Promise 오류', error);
})
} catch(e) {
console.log('오류', e);
}
}
errorFunc();
실행 결과
'JavaScript > JavaScript 문법' 카테고리의 다른 글
[JavaScript]물음표 사용 방법, Null 병합 연산자, 옵셔널 체이닝 (0) | 2021.12.22 |
---|---|
[JavaScript]문자열을 숫자로 변환 (0) | 2021.12.22 |
[JavaScript]코드 실행 시간 측정 방법 (3) | 2021.12.17 |
[JavaScript]rest와 spread 차이 (0) | 2021.12.14 |
[JavaScript]객체 변경을 방지하는 방법 (0) | 2021.12.06 |
댓글