throw 는 try 부분에서도 사용할 수 있으며 catch에서도 사용이 가능합니다
try 에서 던지는 경우
catch에서 던지는 경우
에러가 발생했을 때 그 에러의 메시지나 타입이 부적절하거나 충분한 정보를 제공하지 않는다고 판단되면, 새로운 에러 객체를 생성하여 그 정보를 포함하고 throw 하는 경우
에러가 발생했을 때 특정 로직을 수행한 후에도 같은 에러를 계속 전파하고 싶을 때
이 때 , catch 안에서 에러를 던질 때 2가지의 경우에 차이점에 대해서 알아 봅시다.
catch (error) {
throw new Error(error);
}
catch (error) {
throw error;
}
이 경우에는 새로운 Error 객체를 생성하여
던집니다.
error가 문자열이거나 toString 메서드를 가지고 있는 객체라면, 그 값을 메시지로 사용하여 새로운 Error 객체를 생성합니다.
그렇지만 이 방법은 Error 객체를 새로 생성하므로 원래의
error 로 넘어온 에러 객체의 일부 정보를 잃을 수 있습니다
이 경우에는 error 객체 자체를 던집니다.
이것은 catch 블록에서 받은 원래의 에러 객체를 그대로 다시 던지는 것이므로, 원래의 에러 객체에 있던 모든 정보와 속성을 유지합니다.
예시를 봅시다.
아래 코드에서는 CustomError라는 사용자 정의 에러 클래스를 새로 커스텀하고, 그 클래스의 인스턴스를 던집니다.
여기엔 기존 Error 객체와 달리 code라는 추가 속성이 있습니다.
그렇지만 new Error(error) 형태로 에러를 래핑하고 던지면, 원래의 CustomError 객체의
code 속성과 같은 추가 정보는 사라지게 됩니다
잘 읽었습니다. 좋은 정보 감사드립니다.