Обработка конкретных ошибок в JavaScript (думаю исключения)
как бы вы реализовали различные типы ошибок, чтобы вы могли поймать определенные из них и позволить другим всплывать..?
Один из способов добиться этого-изменить прототип
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'); });