JavaScript
try catch의 함정
citron031
2023. 11. 5. 17:21
try catch를 사용하면, 예상할 수 있는 여러 에러 상황을 처리할 수 있다.
이말인 즉슨 웹페이지에 에러가 발생해도 에러를 바로 처리하기 때문에 작동에 문제가 생기지 않게 해줄 수 있다.
다만, try catch를 사용하여 예기치 못한 상황이 발생할 수도 있는데. 왜냐하면 기본적으로 에러 상황을 바로 처리하여 에러가 발생하지 않았던 것 처럼 자바스크립트가 실행된다는 점이다.
예를 들어, redux saga를 사용중인 앱에 api 호출 부분에서 try catch를 사용해버리면, redux saga에서 실패 시 처리 부분에 진입하는 경우의 수가 사라져버린다.
try catch로 곧바로 API 호출 실패에 대한 처리를 해버렸기 때문에 redux saga는 이 API 호출이 성공된 것으로 해석해버리고 Success에 진입해버린다.
이렇듯, 에러를 발생시킬 필요가 있고 이를 사용해야하는 상황에서는 try catch가 적합하지 않을 수 있다.
const functionAlwaysSuccess = async () => {
try {
const res = await axios.get("~url~");
return res.data;
} catch(e) {
console.err(e);
}
}
위의 functionAlwaysSuccess 함수는 외부에서 호출했을 때, 늘 에러가 나지 않는. 늘 성공하는 함수이다.
따라서, 위의 함수를 redux saga와 함께 사용할 때 redux saga의 Failure 로직에는 진입할 수 없다.