Как бы вы реализовали различные типы ошибок, чтобы вы могли выявлять определенные ошибки и позволять другим всплывать?
Один из способов добиться этого - изменить прототип 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
}
У вас есть какие-нибудь альтернативы?
javascript
error-handling
cllpse
источник
источник
Error
есть проблемы. См. Stackoverflow.com/questions/1382107/…} catch (e) { if (e.name == 'SpecificError') { // specific error } else { throw e; // let others bubble up } }
том, что он не будет работать в IE7, вызывая ошибку «Исключение выброшено и не обнаружено». Ниже приводится чрезвычайно глупое (как всегда) объяснение от msdn: «Вы включили оператор throw, но он не был заключен в блок try, или не было связанного блока catch для перехвата ошибки. Исключения возникают из блока try используя оператор throw, и пойманный за пределами блока try с помощью оператора catch ".instanceOf
. Проверьте здесьname
свойство функции конструктора. Я предлагал бросить сделанный на заказ объект соname
свойством, которое не сломается ...Как отмечено в комментариях ниже, это специфично для Mozilla, но вы можете использовать блоки «условного перехвата». например:
Это дает нечто более похожее на типизированную обработку исключений, используемую в Java, по крайней мере, синтаксически.
источник
This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user. There may also be large incompatibilities between implementations and the behavior may change in the future.
try-catch-finally.js
Используя try-catch-finally.js , вы можете вызвать
_try
функцию с анонимным обратным вызовом, который она вызовет, и вы можете связать.catch
вызовы для обнаружения определенных ошибок и.finally
вызов для выполнения в любом случае.пример
Пример с современными стрелочными функциями и шаблонными литералами
источник
Модуль для использования экспорта
Импортировать в скрипт:
Использование:
Телефонный код внешний:
источник
Мне не нравилось ни одно из этих решений, поэтому я сделал свое. Try-catch-finally.js довольно крутой, за исключением того, что если вы забудете один маленький символ подчеркивания (_) перед попыткой, тогда код все равно будет работать нормально, но ничего не поймают! Тьфу.
CatchFilter
Я добавил в свой код CatchFilter:
Теперь я могу фильтровать
Теперь я могу фильтровать как в C # или Java:
источник
источник