Front-end/JavaScript

JS 에러 핸들링 2편 - catch

파리외 개발자 2023. 7. 29. 09:42

try catch문

//how catch err in program
function fail() {
  try {
    consol.log("just do");
    // throw new Error("second err");
  } catch (error) {
    console.log("Its,,,fail", error);
  }
}

fail();

위 try문의 console.log메서드를 일부러 오타를 내서 실행시켰다.

try가 정상동작하지 않으면 자동으로 catch문으로 넘어가며

catch문은 인자로 에러를 받아서 catch문 내에서 에러인자를 자유롭게 사용할 수 있도록 해준다.

try {
  try {
    never();
  } catch (e) {
    throw new Error(e);
  }
} catch (e) {
  console.log("got it", e);
}

catch문의 순서는 위와 같다.

정의되지 않은 never라는 함수의 실행에 실패하면

가까운 블록인 throw new Error가 먼저 실행될 것 같지만

바깥쪽 try문에 딸려있는 got it 에러문이 먼저 뜨며 해당 에러인자에

내부의 에러객체가 담겨서 콘솔에 찍히게 된다.

 

try {
  setTimeout(function () {
    fakevariable;
  }, 1000);
} catch (e) {
  console.log("cant catch async");
}

catch문은 비동기에서 발생한 에러는 잡아주지 못한다.

fakevariable이라는 말도 안 되는 식을 실행시켰지만

웬 이상한 숫자인 2065(아마도 타임아웃 시간을 말하는 듯)

만 내뱉고 정작 catch문은 아무 동작도 하지 않는 대신

setTimeout api에서 지원해 주는 오류메시지가 떠준다.

 

비동기 에러는 따로 처리하는 방법이 존재한다.