본문 바로가기
Coding/Javascript

Javascript - try...catch...finally

by z쿳쿳z 2021. 7. 24.
728x90
반응형

node server에서 error 처리는 필수이다. 회사에서 recorder server를 처음 만들었을 때, error 처리를 하지 않아서 server에 응답 값을 계속 기다리게 되었고, 이후에 코드가 실행 되지 않아서 문제가 생겼다.

녹화기능을 만들기 위해서 kurento 미디어 서버에서 응답 값이 넘어오지 않아서... 이후의 코드가 실행이 되지 않고.... 아무런 error도 보내지 않았기 때문에 문제가 발생했다.

 

최소한 res.status(400).end() 400 error라도 보내줘야 한다. 그래야 이후의 코드가 실행되면서 error를 정확하게 파악할 수 있다.

//error 처리가 없는 경우
router.post('/room', (req, res)=>{
  if (!recorder) {
    return;
  }
}

//error 처리가 있는 경우
router.post('/room', (req, res)=>{
  if (!recorder) {
    return res.status(BAD_REQUEST).end()
  }
}

 

try...catch....finally()

  • logic을 따라서 try 블록이 실행이 된다.
  • try 블록 안에서 error가 발생한다면 error 가지고 catch 블록을 이동한다.
  • catch 블록안 error 처리 로직을 실행을 시키고, 그 뒤에 finally{} 블록 있으면 실행한다.
  • finally 블록은 try 블록이 실완료되어도 실행이 되고, catch 블록이 실완료되어도 실행이 된다. finally블록은 문제가 있든 없든 실행이 되어야 하는 logic을 넣어 준다.
  • try 안에서 error가 발생하면 catch 블록으로 넘어 가지만, try 블록 안에 callback 함수나 또 다른 블록 형태에서 error가 발생 한다면 catch 문으로 넘어가지 않고, try 안에서 또 다른 error 처리가 필요하다.
    try {
       //...
    } catch (error) {
       //...
       console.error(error)
    } finally {
       console.log('finally')
    }​

throw

  • throw 문은 사용자 정의 예외를 던질 수 있다. 현재 함수의 실행이 중지되고 (throw 이후의 명령문은 실행되지 않습니다.) 컨트롤은 콜 스택의 첫 번째 catch 블록으로 전달됩니다. 호출자 함수 사이에 catch 블록이 없으면 프로그램이 종료된다.
throw 'Error2'; // generates an exception with a string value
throw 42;       // generates an exception with the value 42
throw true;     // generates an exception with the value true
throw new Error('error message') // generates an exception with the value new Error()

 

try...catch() 블록에서 throw로 error 예

function mon(selectMonth) {
  let mo = selectMonth - 1;
  const month = [
    "Jan", "Fab", "Mar", "Apr", "May", "Jun", "Jul", "Aug",
    "sept", "oct", "nov","dec",
  ];

  if (month[mo]) {
    return month[mo];
  } else {
    throw "Invalid Month";
  }
}

function test(mo) {
  try {
    console.log(mon(mo));
  } catch (error) {
    console.error(error);
  }
}

test(10); // Oct
test(100); //Invalid Month

 

 

참조문

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/try...catch

 

try...catch - JavaScript | MDN

try...catch 문은 실행할 코드블럭을 표시하고 예외(exception)가 발생(throw)할 경우의 응답을 지정합니다.

developer.mozilla.org

 

 

 

728x90
반응형

'Coding > Javascript' 카테고리의 다른 글

Javascript - Map  (0) 2021.10.04
Javascript - node.js  (0) 2021.09.11
TypeError: x is not a function  (0) 2021.07.14
Javascript - fetch api(2)  (0) 2021.03.04