Обработка конкретных ошибок в JavaScript (думаю исключения)


как бы вы реализовали различные типы ошибок, чтобы вы могли поймать определенные из них и позволить другим всплывать..?

Один из способов добиться этого-изменить прототип

3 70

3 ответа:

чтобы создать пользовательские исключения, вы можете наследовать от объекта 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, но вы можете использовать блоки "условный улов". например:

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');
});