node Exception 처리

function b(){
throw new Exception()
}
function a(){
try{
b();
catch(e){
}
}

이런식의 구조에서
b 함수에서 error 발생시
node 크레쉬 되어 버립니다.

이렇게 하면 계속 프로세스가 계속 동작해야 하는거 아닌가요?
그리고 크레쉬 안되게 에러처리 하는 방법은 뭐가 있을까요?

예외(Exception)와 오류(Error)는 다릅니다.
Exception은 개발자가 처리할 수 있는(try-catch로 감싸 무시할 수 있는) 수준이고,
Error는 개발자가 처리할 수 없는 영역(시스템)입니다.

아마 Error라고 말씀하신거 보니까 프로세스가 종료되는게 당연할 것 같네요.

자바가 아니라 javascript 입니다.
그리고 에러 가 아니라 예외의 경우입니다.

TypeError: Cannot read properties of undefined (reading ‘replace’)

문자열 조작하다가 data가 null 인경우인데
null point exception 이지 , 복구 불가능한 상황은 아니자나요?

TypeError 오류를 잡아내기

try {
  null.f();
} catch (e) {
  console.log(e instanceof TypeError); // true
  console.log(e.message);              // "null has no properties"
  console.log(e.name);                 // "TypeError"
  console.log(e.fileName);             // "Scratchpad/1"
  console.log(e.lineNumber);           // 2
  console.log(e.columnNumber);         // 2
  console.log(e.stack);                // "@Scratchpad/2:2:3\n"
}

충분히 잡아낼수 있는 예외 입니다.

문제는 다른 함수에서 잡을수 있냐? 못잡냐 인 거죠?

죄송합니다… 위에 Exception을 보고도 아래 에러만 보고 판단했네요…

data가 null인경우면 catch가 될텐데요… 잘 모르겠네요

rxjs나 비동기 함수에서는 capture부분이 이미 지나가 버려 exception capture를 못한다는 군요.
스레드가 분리 되기 때문이라 봐야죠.

1개의 좋아요

@killdong 게시글에 작성하신 예제 코드는 run 해보면 캐치를 잘해냅니다. 마지막 댓글을 보니 비동기 함수 처리중에 발생한 이슈인것 같습니다.

이런경우에는 b함수내부에 try-catch 블락 선언으로 별도로 에러 핸들링이 가능해 보입니다. 아니면

function asyncErrorHandle (promise) {
try {
return [ await promise, null ];
} catch (e) {
return [ null, e ];
}
}

같은 유용한 함수 도 있습니다.