programing tip

자바 스크립트에서 특정 오류 처리 (예외를 생각해보세요)

itbloger 2020. 8. 27. 07:26
반응형

자바 스크립트에서 특정 오류 처리 (예외를 생각해보세요)


다른 유형의 오류를 어떻게 구현하여 특정 오류를 포착하고 다른 오류가 발생하도록 할 수 있습니다 ..?

이를 달성하는 한 가지 방법은 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

반응형