Section 10. Error
Udemy - JavaScript: The Advanced Concepts
Section 10. Error
Throw Error
new Error() 자체만으로는 무슨 일을 하는건 아니고
throw 해야지 의미있음
throw: 실행 중단해라, 예외를 던지겠다
error뿐 아니라 무엇이든 던질 수 있음
//이런것도 가능!!
try {
throw 'hi'
} catch (e) {
console.log(e); // 'hi'
}
throw 호출
-> 현재 실행컨텍스트 중단
-> 콜스택을 따라 다음 컨텍스트 중 catch가 있는곳을 찾아서 핸들링
(-> catch가 끝까지 없으면 프로그램 종료 되어야 하는데)
-> runtime이 잡아줌 (onerror() / process.on("uncaughtException"))
Error 속성
name: 'Error'
message: new Error() 할때 파라메터로 들어간 string
stack: 에러가 발생한 지점을 알려주는 string
// 이런것도 가능!!
const myError = new Error('This is message');
myError.name = 'HAHAHA';
console.log(myError);
//HAHAHA: This is message
// at Object.<anonymous> (/Users/wendy.wh/develop/free/free.js:1:17)
Error를 커스터마이징 해서 사용하고 싶을 때
(많은 정보를 노출하기 싫어서, 혹은 공통으로 사용하고싶어서 등등)
class AuthenticationError extends Error {
constructor(message) {
super(message)
this.name = 'AuthenticationError'
}
}
throw new AuthenticationError('내가 만든 에러~');
Handle Error
-
try{} catch{} finally{} :
sync 코드 + async 코드(Async/Await)
try에 return이 있어도 finally는 실행됨 -
catch() : async 코드(Promise)
Promise
.resolve('resolved')
.then(res => {
const newRes = res + ' 1';
console.log(newRes);
Promise.resolve().then(res => { throw Error('new Error!!!') });
return newRes;
})
.then(res => {
const newRes = res + ' 2';
console.log(newRes);
return newRes;
})
// resolved 1
// resolved 1 2
// UnhandledPromiseRejectionWarning: Error: new Error!!!
위의 경우는 중간 promise에서 에러를 발생시켜도
처음 promise가 흘러가는데는 영향이 없다
중간 promise의 error를 잡으려면 그에 연결된 catch()가 필요함
catch block scope
catchd의 파라미터(여기서는 err)는 catch블럭 안에서만 유효하다
(function () {
try {
throw new Error();
} catch (err) {
var err = 5;
var boo = 10;
console.log(err); //5
}
console.log(err); //undefined
console.log(boo); //10
})();
Author And Source
이 문제에 관하여(Section 10. Error), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dldngus5/Section10-Error저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)