Muscardinus
Error Handling 본문
728x90
개발하는데에 있어서 새로운 것을 계속 개발하는 것도 좋지만, 기존의 코드를 계속 보완하는 것 또한 중요하다. 보완을 위해서 하는 행동 중 한 가지가 바로 Error을 찾는 것이고 그것을 처리하는 Logic을 구현하는 것이다.
Error 선언
우리는 Error 생성자를 통하여 오류 객체를 생성한다. Error 객체의 인스턴스는 런타임 오류가 발생했을때 던져진다.
그리고 Error 객체 안에는 두 가지의 property가 있다. 그것은 message와 stack이다.
- message -> Error을 선언할 때 arguments로 준 인자(첫 번째 인자)를 그대로 보여준다.
- stack -> Error를 일으킨 파일에 대한 history를 전달해준다.
let err = new Error("I'm Error");
err.message
err.stack
참고:
developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Error
throw
throw new Error("Hello")
throw를 통하여 우리는 Error을 실행한다. 쉽게 생각하면 return와 같다고 생각할 수 있다. 그 아래에 어떤 코드가 존재하더라도 그것을 무시하고 바로 Error를 던진다.
일반적 오류 던지기
try {
throw new Error("Hello");
console.log("After Error");
} catch (error) {
console.log(error);
console.log(error.message);
console.log(error.stack);
}
Finally
finally는 에러 유무와 상관없이 실행시키고 싶은 코드가 있을 경우 사용한다.
try {
console.log(a)
} catch (error) {
console.log(error);
} finally {
console.log("FINALLY FINNISHED");
}
.catch()
비동기 함수에서 Error을 Catch 할 때 사용한다.
Promise.resolve("asyncfail")
.then((response) => {
console.log(response);
return response;
})
.catch((err) => console.log(err.message));
Others....
JavaScript에는 일반적인 Error 생성자 외에도 7개의 중요 오류 생성자가 존재한다.
- EvalError - global function인 eval()과 관련된 error
- InternalError - JS engine 내부에서 문제가 있을 때 발생하는 error
- RangeError - numeric 변수 혹은 parameter가 유효한 범위를 초과할 때 발생하는 error
- ReferenceError - 유효하지 않은 값을 referencing 할 때 발생하는 error. 보통 변수 선언 전에 호출할 경우 발생
- SyntaxError - JS 엔진이 parsing 도중 오류가 발생할 경우
- TypeError - 변수나 매개변수가 유효한 자료형이 아닐때 발생
- URIError - encodeURI() 혹은 decodeURI()에 적절하지 않은 매개변수가 전달 될 경우 발생
Custom Error Function 만들기
Error은 생성자 함수이므로, 우리는 extends를 사용하여 자신의 프로그램에 맞게 추가할 수 있다. 자신의 프로그램의 stack trace 및 불필요한 정보를 노출하지 않고 error을 나타낼 수 잇다
class AuthenticationError extends Error {
constructor(message) {
super(message);
this.name = "AuthenticationError";
this.message = "authentication problem";
this.fix = "please log in";
}
}
const err = new AuthenticationError("oopsie");
err; // Error: "authentication problem" stack trace
err.fix; // please log in
728x90
'FrontEnd > JavaScript Basics' 카테고리의 다른 글
Type Coercion (0) | 2020.12.15 |
---|---|
JS Types (0) | 2020.12.15 |
Modules in JS (1) | 2020.12.14 |
Call Stack And Memory Heap (0) | 2020.11.30 |
Writing Optimized Code (0) | 2020.11.30 |
Comments