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 로직에는 진입할 수 없다.