자바스크립트 예외처리 2/4
try catch , Error 객체
일반코드
function f2(){
console.log('f2 start');
console.log('f2 end');
}
function f1(){
console.log('f1 start');
f2();
console.log('f1 end');
}
console.log('will : f1');
f1();
console.log('did : f1');
throw 적용
function f2(){
console.log('f2 start');
throw '에러';
console.log('f2 end');
}
function f1(){
console.log('f1 start');
f2();
console.log('f1 end');
}
console.log('will : f1');
f1();
console.log('did : f1');
//throw를 넣으면
//throw 밑의 코드는 실행되지않는다.
//즉, 저 f2호출해서
//f2스타트 까지 찍히고 throw에러 하면
그뒤로는 찍히지않는다.
//왜냐면
//파괴가 계속일어나기때문
//즉,f1에돌아와서도 f1 end 도 실행 안되고
예외 처리
try catch
function f2(){
console.log('f2 start');
throw '에러';
console.log('f2 end');
}
function f1(){
console.log('f1 start');
try{
f2();
}catch(e){
console.log(e);
}
console.log('f1 end');
}
console.log('will : f1');
f1();
console.log('did : f1');
//일단 저기 trow에러 하고나서
// 밑부분(f2 end)은 실행이 안되고
//try 사이에 감싸준 f2부분이 무슨의미냐면
//트라이안의구문은 에러가나도 캐치를해서넘긴다
//즉 밑부분이 다 실행이된다는뜻,,,
//그래서 캐치로해서 넘기면
//다 처리가 됬기떄문에
//밑에 콘솔이 찍히고(f1 end)
//따라서 쭉쭉 다 실행이 됨
이번엔 좀 다른부분에 트라이 캐치 적용하면
function f2(){
console.log('f2 start');
throw '에러';
console.log('f2 end');
}
function f1(){
console.log('f1 start');
f2();
console.log('f1 end'); //파괴
}
console.log('will : f1');
try{
f1();
}catch(e){
console.log(e);
}
console.log('did : f1');
//이렇게 하면
//f1을 트라이 캐치하는거기때문에
//f1에서 시작되고
//f2시작되서 에러찍고
//f1엔드는 안찍히고 파괴되고
//다시 f1호출하는데로 돌아오게되죠(스택에 그렇게 쌓였기때문에 스택이 다빠지고 f1으로돌아와서 처리를 하는상황)
//아무튼 그래서 나머지 맨밑에 로그는 트라이 캐치로 처리되서 나머지가 찍히는거다
좀더 정확한 코드법
에러 객체 이용하기!
function f2(){
console.log('f2 start');
throw new Error('에러');
console.log('f2 end');
}
function f1(){
console.log('f1 start');
f2();
console.log('f1 end'); //파괴
}
console.log('will : f1');
try{
f1();
}catch(e){
console.log(e);
}
console.log('did : f1');
저 에러객체에는 해당하는 콜스택의 정보가 담겨있다.
즉, 로그가 담겨있다는 말이다.
즉, 어디서부터호출되어서가는지 그 로그정보를 볼수있다는 의미임
어떤파일의 몇번째 줄에 에러가있고
그 상위함수는 어디고이런걸 로그로 볼수있다.
즉, 어디서 발생했는지 알수있다는!!!