JavaScript에서 예외 전파하기
제품 JSON 작업의 catch 블록을 살펴보겠습니다:
catch (error) {
if (error.name == 'SyntaxError') {
alert('잘못된 제품 JSON');
} else if (error.name == 'ProductCostError') {
alert('제품에 가격 또는 수량 정보가 없습니다');
}
}
보시다시피, 우리는 계획한 두 가지 예외를 잡아서
그에 맞게 대응합니다.
그러나 우리가 예상하지 못한 다른 유형의 예외가
발생하면 어떻게 될까요? 이 경우에도 예외는
catch 블록으로 들어가지만,
다른 유형의 예외는 우리의 if 문 중
어느 곳에도 해당되지 않기 때문에 아무런 반응이
일어나지 않습니다.
아무런 반응이 없다는 것은, 실제로 아무것도: 콘솔에 오류 메시지조차 출력되지 않는다는 의미입니다. 우리 코드는 그저 조용히 작동하지 않을 뿐입니다.
따라서 다음 규칙이 존재합니다: 당신의
코드는 어떻게 처리해야 할지 아는 예외만
잡아야 합니다. 예외가 알려지지 않은 것이라면,
throw를 사용하여 그것을 전파
해야 합니다. 이 경우 더 잘 알고 있는 상위 코드가
그것을 잡거나, 예외가 콘솔에 오류로 출력될 것입니다.
우리 코드를 수정해 봅시다:
catch (error) {
if (error.name == 'SyntaxError') {
alert('잘못된 제품 JSON');
} else if (error.name == 'ProductCostError') {
alert('제품에 가격 또는 수량 정보가 없습니다');
} else {
throw error; // 예외를 더 멀리 전파
}
}
다음 코드가 주어졌습니다:
try {
let arr = JSON.parse(json);
for (let i = 0; i < arr.length; i++) {
localStorage.setItem(i, arr[i]);
}
} catch (error) {
if (error.name == 'QuotaExceededError') {
alert('저장소 공간이 부족합니다');
}
if (error.name == 'SyntaxError') {
alert('잘못된 JSON 형식입니다');
}
}
이 코드의 문제점은 무엇일까요? 더 나은 방식으로 수정해 보세요.