Mdn공식 문서에 따르면 이렇게 나와있다
try...catch 문은 실행할 코드블럭을 표시하고 예외(exception)가 발생(throw)할 경우의 응답을 지정합니다.
문법부터 알아봐야 겠다.
try {
try_statements
}
[catch (exception_var) {
catch_statements
}]
[finally {
finally_statements
}]
try_statements
실행될 부분
catch_statements
try에서 Exception이 발생할시 실행될 블럭
finally_statements
try 선언이 완료된 이후에 실행된 블럭. 이 벌륵은 예외 발생 여부와 상관없이 실행된다.
try {
alert('try 블록 시작'); // (1) <--
varibles; // 변수가 선언되지 않아 에러발생
alert('try end' 여기까지 실행되지 않고 catch 문으로); // (2)
} catch(err) {
alert(`에러가 발생했습니다!`); // (3) <--
}
try 문은 중첩 할 수 있다. 내부의 try 문에 catch 블록이 없으면, 둘러싼 try 문의 catch 블록이 입력됩니다.
catch 블록은 복수 , finally 블록은 1개만 정의할수 있다. 또한 catch 와 finally 블록은 어느 한쪽만 정의되어 있으면 문제 없다.
try {
****$%#$^#%$&%^*^%*$#$@%#%
} catch(e) {
alert("유효하지 않은 코드는 자바스크립트 엔진이 코드를 이해할 수 없습다");
}
코드를 읽는 중에 발생하는 에러는 'parse-time 에러’라고 부르는데, 엔진은 이 코드를 이해할 수 없기 때문에 parse-time 에러는 코드 안에서 복구가 불가능합니다.
try..catch는 유효한 코드에서 발생하는 에러만 처리할 수 있습니다. 이런 에러를 ‘런타임 에러(runtime error)’ 혹은 '예외(exception)'라고 부릅니다.
예시2.
try {
await createBoard({
variables: {
aaa: "훈이",
bbb: "1234",
ccc: "안녕하세요 훈이에요",
ddd: "반갑습니다"
}
})
} catch(error) {
alert(error.message) // 경고창(실패했습니다.) ==> 백엔드 개발자가 보내주는 실패 메시지
} finally {
// 성공, 실패 여부와 상관없이 무조건 마지막에 실행되는 부분
// 필요없다면 생략 가능
}