JavaScript에서 비동기 콜백의 예외 처리
make에 배열에 존재하지 않는 요소의 번호가
매개변수로 전달된 경우를 예외 상황이라고 가정합니다.
이미 알고 있듯이, 비동기 함수 내부에서 발생한 예외는
try-catch를 통해 잡을 수 없습니다.
우리의 경우, make 또는 콜백 내부에서 발생한 예외는
잡히지 않습니다:
try {
make(10, function(res) {
console.log(res);
});
} catch(err) {
// 잡히지 않음
}
콜백 방식에서는 예외를 다음과 같이 처리합니다: 콜백의 첫 번째 매개변수에 결과를, 두 번째 매개변수에 오류를 보냅니다. 이 경우 오류 처리는 다음과 같이 이루어집니다:
make(10, function(res, err) {
if (!err) {
console.log(res); // 오류가 발생하지 않음, 결과를 출력
} else {
console.log(err); // 오류가 발생함, 오류 텍스트를 출력
}
});
우리의 make 함수 코드를 설명한 방식에 맞게
수정해 봅시다:
function make(num, callback) {
setTimeout(function() {
let arr = [1, 2, 3, 4, 5];
let err;
if (arr[num] === undefined) {
err = 'elem not exists'; // 오류 텍스트
} else {
err = null; // 오류 없음
}
callback(arr[num], err);
}, 3000);
}