function b(){
throw new Exception()
}
function a(){
try{
b();
catch(e){
}
}
이런식의 구조에서
b 함수에서 error 발생시
node 크레쉬 되어 버립니다.
이렇게 하면 계속 프로세스가 계속 동작해야 하는거 아닌가요?
그리고 크레쉬 안되게 에러처리 하는 방법은 뭐가 있을까요?
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를 못한다는 군요.
스레드가 분리 되기 때문이라 봐야죠.
@killdong 게시글에 작성하신 예제 코드는 run 해보면 캐치를 잘해냅니다. 마지막 댓글을 보니 비동기 함수 처리중에 발생한 이슈인것 같습니다.
이런경우에는 b함수내부에 try-catch 블락 선언으로 별도로 에러 핸들링이 가능해 보입니다. 아니면
function asyncErrorHandle (promise) {
try {
return [ await promise, null ];
} catch (e) {
return [ null, e ];
}
}
같은 유용한 함수 도 있습니다.