Muscardinus

Error Handling 본문

FrontEnd/JavaScript Basics

Error Handling

Muscardinus 2020. 12. 14. 22:05
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