mutation이 항상 성공하는 것은 아니다.
Backend 컴퓨터에 문제가 발생할 수도 있고, 내가 수정하려는 게시물이 갑자기 삭제가 되는 바람에 수정에 문제가 발생하는 등 여러가지 실패 가능성이 있다.
따라서, 우리는 성공에 대한 처리, 실패에 대한 처리를 나누어 작업해야 한다.
try {
await createBoard({
variables: {
aaa: "훈이",
bbb: "1234",
ccc: "안녕하세요 훈이에요",
ddd: "반갑습니다"
}
})
} catch(error) {
alert(error.message) // 경고창(실패했습니다.) ==> 백엔드 개발자가 보내주는 실패 메시지
} finally {
// 성공, 실패 여부와 상관없이 무조건 마지막에 실행되는 부분
// 필요없다면 생략 가능
}
그래서 try catch가 뭐야?
아무리 프로그래밍에 능한 사람이더라도 에러가 있는 스크립트를 작성할 수 있다. 원인은 아마도 실수, 예상치 못한 사용자 입력, 잘못된 서버 응답 등의 수천만 가지 이유 때문일 이며,
에러가 발생하면 스크립트는 ‘죽고’(즉시 중단되고), 콘솔에 에러가 출력됩니다.
그러나 try..catch 문법을 사용하면 스크립트가 죽는 걸 방지하고, 에러를 ‘잡아서(catch)’ 더 합당한 무언가를 할 수 있게 된다.
예제
try {
// 코드...1.
#### //2.에러가 없다면 try 즉시 실행 catch 블록은 건너 뛰게 된다.
} catch (err) {
// 에러 핸들링
//3.에러가 있다면, try 안 코드의 실행이 중단되고, catch(err) 블록으로 제어 흐름이 넘어갑니다. 변수 err(아무 이름이나 사용 가능)는 무슨 일이 일어났는지에 대한 설명이 담긴 에러 객체를 포함한다.
}
1.먼저, try {...} 안의 코드가 실행
2.에러가 없다면, try 안의 마지막 줄까지 실행되고, catch 블록은 건너뛴다.
3.에러가 있다면, try 안 코드의 실행이 중단되고, catch(err) 블록으로 제어 흐름이 넘어간다. 변수 err(아무 이름이나 사용 가능 우리는 주로 error사용)는 무슨 일이 일어났는지에 대한 설명이 담긴 에러 객체를 포함한다.
error는 함수인가?🔥
error생성자 함수는 에러 객체를 생선한다. error 생성자 함수에는 에러를 상세히 걸명하는 에러 메세지를 인수로 전달할 수 있다!!