반응형
자바 스크립트에서 특정 오류 처리 (예외를 생각해보세요)
다른 유형의 오류를 어떻게 구현하여 특정 오류를 포착하고 다른 오류가 발생하도록 할 수 있습니다 ..?
이를 달성하는 한 가지 방법은 Error
객체 의 프로토 타입을 수정하는 것입니다 .
Error.prototype.sender = "";
function throwSpecificError()
{
var e = new Error();
e.sender = "specific";
throw e;
}
특정 오류 포착 :
try
{
throwSpecificError();
}
catch (e)
{
if (e.sender !== "specific") throw e;
// handle specific error
}
대안이 있습니까?
사용자 지정 예외를 만들려면 Error 개체에서 상속 할 수 있습니다.
function SpecificError () {
}
SpecificError.prototype = new Error();
// ...
try {
throw new SpecificError;
} catch (e) {
if (e instanceof SpecificError) {
// specific error
} else {
throw e; // let others bubble up
}
}
오류에서 상속하지 않는 최소한의 접근 방식은 이름과 메시지 속성이있는 간단한 개체를 던질 수 있습니다.
function throwSpecificError() {
throw {
name: 'SpecificError',
message: 'SpecificError occurred!'
};
}
// ...
try {
throwSpecificError();
} catch (e) {
if (e.name == 'SpecificError') {
// specific error
} else {
throw e; // let others bubble up
}
}
아래 주석에서 언급했듯이 이것은 Mozilla에만 해당되지만 '조건부 catch'블록을 사용할 수 있습니다. 예 :
try {
...
throwSpecificError();
...
}
catch (e if e.sender === "specific") {
specificHandler(e);
}
catch (e if e.sender === "unspecific") {
unspecificHandler(e);
}
catch (e) {
// don't know what to do
throw e;
}
이것은 적어도 구문 적으로 Java에서 사용되는 형식화 된 예외 처리와 더 유사한 것을 제공합니다.
try-catch-finally.js
예
_try(function () {
throw 'My error';
})
.catch(Error, function (e) {
console.log('Caught Error: ' + e);
})
.catch(String, function (e) {
console.log('Caught String: ' + e);
})
.catch(function (e) {
console.log('Caught other: ' + e);
})
.finally(function () {
console.log('Error was caught explicitly');
});
참고URL : https://stackoverflow.com/questions/1433558/handling-specific-errors-in-javascript-think-exceptions
반응형
'programing tip' 카테고리의 다른 글
파일 린트의“너무 적은 공개 방법”메시지는 무엇을 의미합니까? (0) | 2020.08.27 |
---|---|
Mercurial을 사용하면 푸시하기 전에 일련의 변경 세트를 하나로 "압축"할 수 있습니까? (0) | 2020.08.27 |
Selenium-WebDriver에 Java에서 몇 초 동안 기다리도록 어떻게 요청할 수 있습니까? (0) | 2020.08.27 |
Spring DAO 대 Spring ORM 대 Spring JDBC (0) | 2020.08.27 |
정적 필드가 상속됩니까? (0) | 2020.08.27 |