Четыре вида ошибок в JavaScript

Программисты создают ошибки, программы создают ошибки, оборудование создает ошибки, сети создают ошибки.

В любом конкретном проекте или приложении всегда будет какое-то сообщение об ошибке. Идеального приложения не существует. Независимо от того, программируете ли вы на JavaScript или других языках, нужно понимать, как обрабатывать ошибки, отлавливать их и правильно сортировать.

Я собираюсь рассмотреть четыре вида ошибок в JavaScript и некоторые концепции их обработки.

После этого, в конце статьи, мы рассмотрим, как обрабатывать ошибки в типичных приложениях JavaScript.

Стандарт

Первая группа называется стандартной. Стандарт — это то, что мы также называем распространенными ошибками JavaScript.

Это будут такие вещи, как:

  • Ошибка синтаксиса
  • ReferenceError
  • RangeError
  • Ошибка типа
  • URIError
  • EvalError

Эти ошибки могут полностью остановить программу и могут произойти еще до того, как программа запустится. Иногда во время загрузки страницы или запуска узла вы увидите эти ошибки, препятствующие запуску программы.

Обычно их легче всего исправить, потому что они дают вам определенную строку кода и конкретные сообщения об ошибках. Некоторые IDE могут даже обнаруживать эти ошибки, когда вы их печатаете.

Система

Следующая группа ошибок — это то, что мы называем системными ошибками. Мы могли бы описать их как проблемы операционной системы во время выполнения, потому что мы не можем предсказать, что все это произойдет до тех пор, пока программа не запустится. Такие проблемы, как:

  • Файл не существует
  • Папка не существует
  • Проблемы с разрешениями
  • Проблемы с сетью
  • Аппаратные проблемы
  • Общие системные ограничения

Они относятся к динамическим вещам, которые могут происходить прямо во время выполнения кода. Обычно их можно перехватить и отправить пользователю полезные сообщения об ошибках.

Предположим, что интернет пользователя отключается во время попытки вашей программы получить последние данные — вы можете обработать эту ошибку и сообщить пользователю, что он должен проверить свою систему на наличие доступа в Интернет.

Указанный пользователем

Следующая классификация ошибок определяется пользователем и создается инженерами, составившими код. Это инженерные ошибки, которые обычно связаны с бизнесом:

  • Неверная аутентификация
  • Недействительная авторизация
  • Проверка достоверности данных
  • Проверка варианта
  • Обнаружение нарушений безопасности

Любое сообщение об ошибке, которое инженер решает добавить в свое приложение, становится ошибкой, определяемой пользователем. Вы должны использовать их — я использую их много. Посмотрите несколько примеров:

throw new Error('Invalid Authentication');
​
throw new Error('Invalid Username - Too Short');
throw new Error('Invalid Ice Cream Flavor');

Утверждения

Последняя группа типов ошибок — это утверждения, особая группа. Они похожи на проблемы, возникающие у инженеров, но вместо этого инженеры передают информацию, например, сообщения о реализации от инженера-автора будущему инженеру:

  • Проверьте предварительные условия, чтобы выявить ошибки в разработке или во время выполнения.
  • Обычно удаляется из производственных сборок приложения.
  • Полезно для «проектирования по контракту»

Обычно они проверяют что-то вроде предусловия и выявляют ошибки во время разработки или выполнения. Еще один распространенный способ решения этой проблемы — модульное тестирование.

Обработка ошибок в JavaScript

Есть три ключевых слова, которые вы можете использовать, и все они делают разные вещи, когда дело доходит до обработки ошибок в JavaScript.

попробовать

Оператор(ы), которые должны быть выполнены. Вы ожидаете, что могут возникнуть ошибки.

поймать

Оператор(ы), которые должны быть выполнены, если возникнет исключение. Вы можете обрабатывать ошибки и реагировать на них — постарайтесь не выдавать здесь больше ошибок!

наконец-то

Операторы, выполняемые после завершения блока try и catch, независимо от ветки. Вы можете выполнить последующую работу после попытки или ловли.

Основы обработки ошибок

Что мы делаем, когда попадаем внутрь блока catch?

We Catch -> Triage -> Log

Поймать

Когда ваш код JS перехватывает ожидаемые ошибки после их возникновения, он может обрабатывать их соответствующим образом. Вот несколько вариантов для рассмотрения.

1. Сортировка

Как только ошибка обнаружена, код может определить типы ошибок (см. выше) и серьезность.

Если вы обнаружите ошибку, вам нужно определить, что это была за ошибка и ее серьезность.

Это может быть настоящая фатальная ошибка, когда ваше приложение больше не может работать должным образом, или это может быть предупреждением.

Если пользователь не аутентифицирован, приложению может не потребоваться сбой, это просто означает, что приложение должно заставить пользователя войти в систему. Они могут попробовать еще раз.

Если сервер не работает, пользователь ничего не может сделать, чтобы решить проблему. Приложение может просто отображать сообщение вроде:

Сожалеем, у нас возникли трудности.

2. Журнал

В зависимости от вашей среды, в которой работает JavaScript, например браузера, Node или Electron, вы можете регистрировать свои сообщения об ошибках в средствах системного ведения журнала. Это позволяет разработчику или, возможно, пользователю предоставить больше информации о том, что пошло не так в приложении.

3. Маяк или трек

Отличным дополнением является отправка маяка во внешнюю систему отслеживания ошибок (Rollbar, Sentry, Bugsnag и т. д.). Это полезно, потому что может обеспечить более глубокое понимание, а также уведомить вашу команду по электронной почте, Slack, тексту или другим способом.

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

Удачи!