Что такое javascript error

Что такое javascript error

Когда что-то разрабатываем, то нам часто необходимы собственные классы ошибок для разных вещей, которые могут пойти не так в наших задачах. Для ошибок при работе с сетью может понадобиться HttpError , для операций с базой данных DbError , для поиска – NotFoundError и т.д.

Наши ошибки должны поддерживать базовые свойства, такие как message , name и, желательно, stack . Но также они могут иметь свои собственные свойства. Например, объекты HttpError могут иметь свойство statusCode со значениями 404 , 403 или 500 .

JavaScript позволяет вызывать throw с любыми аргументами, то есть технически наши классы ошибок не нуждаются в наследовании от Error . Но если использовать наследование, то появляется возможность идентификации объектов ошибок посредством obj instanceof Error . Так что лучше применять наследование.

По мере роста приложения, наши собственные ошибки образуют иерархию, например, HttpTimeoutError может наследовать от HttpError и так далее.

Расширение Error

В качестве примера рассмотрим функцию readUser(json) , которая должна читать данные пользователя в формате JSON.

Пример того, как может выглядеть корректный json :

Внутри будем использовать JSON.parse . При получении некорректного json он будет генерировать ошибку SyntaxError . Но даже если json синтаксически верен, то это не значит, что это будет корректный пользователь, верно? Могут быть пропущены необходимые данные. Например, могут отсутствовать свойства name и age , которые являются необходимыми для наших пользователей.

Наша функция readUser(json) будет не только читать JSON-данные, но и проверять их («валидировать»). Если необходимые поля отсутствуют или данные в неверном формате, то это будет ошибкой. Но не синтаксической ошибкой SyntaxError , потому что данные синтаксически корректны. Это будет другая ошибка.

Назовём её ошибкой валидации ValidationError и создадим для неё класс. Ошибка этого вида должна содержать информацию о поле, которое является источником ошибки.

Наш класс ValidationError должен наследовать от встроенного класса Error .

Класс Error встроенный, вот его примерный код, просто чтобы мы понимали, что расширяем:

Теперь давайте унаследуем от него ValidationError и попробуем новый класс в действии:

Обратите внимание: в строке (1) вызываем родительский конструктор. JavaScript требует от нас вызова super в дочернем конструкторе, так что это обязательно. Родительский конструктор устанавливает свойство message .

Родительский конструктор также устанавливает свойство name для "Error" , поэтому в строке (2) мы сбрасываем его на правильное значение.

Попробуем использовать его в readUser(json) :

Блок try..catch в коде выше обрабатывает и нашу ValidationError , и встроенную SyntaxError из JSON.parse .

Обратите внимание, как мы используем instanceof для проверки конкретного типа ошибки в строке (*) .

Мы можем также проверить тип, используя err.name :

Версия с instanceof гораздо лучше, потому что в будущем мы собираемся расширить ValidationError , сделав его подтипы, такие как PropertyRequiredError . И проверка instanceof продолжит работать для новых наследованных классов. Так что это на будущее.

Также важно, что если catch встречает неизвестную ошибку, то он пробрасывает её в строке (**) . Блок catch знает, только как обрабатывать ошибки валидации и синтаксические ошибки, а другие виды ошибок (из-за опечаток в коде и другие непонятные) он должен выпустить наружу.

Дальнейшее наследование

Класс ValidationError является слишком общим. Много что может пойти не так. Свойство может отсутствовать или иметь неверный формат (например, строка как значение возраста age ). Поэтому для отсутствующих свойств сделаем более конкретный класс PropertyRequiredError . Он будет нести дополнительную информацию о свойстве, которое отсутствует.

Читайте также:  Запустится ли компьютер без оперативной памяти

Новый класс PropertyRequiredError очень просто использовать: необходимо указать только имя свойства new PropertyRequiredError(property) . Сообщение для пользователя message генерируется конструктором.

Обратите внимание, что свойство this.name в конструкторе PropertyRequiredError снова присвоено вручную. Правда, немного утомительно – присваивать this.name = в каждом классе пользовательской ошибки. Можно этого избежать, если сделать наш собственный «базовый» класс ошибки, который будет ставить this.name = this.constructor.name . И затем наследовать все ошибки уже от него.

Давайте назовём его MyError .

Вот упрощённый код с MyError и другими пользовательскими классами ошибок:

Теперь пользовательские ошибки стали намного короче, особенно ValidationError , так как мы избавились от строки "this.name = . " в конструкторе.

Обёртывание исключений

Назначение функции readUser в приведённом выше коде – это «чтение данных пользователя». В процессе могут возникнуть различные виды ошибок. Сейчас у нас есть SyntaxError и ValidationError , но в будущем функция readUser может расшириться и, возможно, генерировать другие виды ошибок.

Код, который вызывает readUser , должен обрабатывать эти ошибки.

Сейчас в нём используются проверки if в блоке catch , которые проверяют класс и обрабатывают известные ошибки и пробрасывают дальше неизвестные. Но если функция readUser генерирует несколько видов ошибок, то мы должны спросить себя: действительно ли мы хотим проверять все типы ошибок поодиночке во всех местах в коде, где вызывается readUser ?

Часто ответ «Нет»: внешний код хочет быть на один уровень выше всего этого. Он хочет иметь какую-то обобщённую ошибку чтения данных. Почему именно это произошло – часто не имеет значения (об этом говорится в сообщении об ошибке). Или даже лучше, если есть способ получить подробности об ошибке, но только если нам это нужно.

Итак, давайте создадим новый класс ReadError для представления таких ошибок. Если ошибка возникает внутри readUser , мы её перехватим и сгенерируем ReadError . Мы также сохраним ссылку на исходную ошибку в свойстве cause . Тогда внешний код должен будет только проверить наличие ReadError .

Этот код определяет ошибку ReadError и демонстрирует её использование в readUser и try..catch :

В приведённом выше коде readUser работает так, как описано – функция распознаёт синтаксические ошибки и ошибки валидации и выдаёт вместо них ошибки ReadError (неизвестные ошибки, как обычно, пробрасываются).

Внешний код проверяет только instanceof ReadError . Не нужно перечислять все возможные типы ошибок

Этот подход называется «обёртывание исключений», потому что мы берём «исключения низкого уровня» и «оборачиваем» их в ReadError , который является более абстрактным и более удобным для использования в вызывающем коде. Такой подход широко используется в объектно-ориентированном программировании.

Итого

  • Мы можем наследовать свои классы ошибок от Error и других встроенных классов ошибок, но нужно позаботиться о свойстве name и не забыть вызвать super .
  • Мы можем использовать instanceof для проверки типа ошибок. Это также работает с наследованием. Но иногда у нас объект ошибки, возникшей в сторонней библиотеке, и нет простого способа получить класс. Тогда для проверки типа ошибки можно использовать свойство name .
  • Обёртывание исключений является распространённой техникой: функция ловит низкоуровневые исключения и создаёт одно «высокоуровневое» исключение вместо разных низкоуровневых. Иногда низкоуровневые исключения становятся свойствами этого объекта, как err.cause в примерах выше, но это не обязательно.

Задачи

Наследование от SyntaxError

Создайте класс FormatError , который наследует от встроенного класса SyntaxError .

Читайте также:  Как открыть настройки роутера asus

Класс должен поддерживать свойства message , name и stack .

Дата публикации: 2016-10-07

От автора: приветствую вас, друзья. Из этой небольшой статьи мы с вами узнаем, как увидеть и исправить ошибки JavaScript. Статья написана для начинающих изучение JavaScript.

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

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

JavaScript. Быстрый старт

Изучите основы JavaScript на практическом примере по созданию веб-приложения

Что же поможет найти ошибки JavaScript? Консоль браузера. Здесь мы вкратце пройдемся по этому инструменту в различных браузерах, в частности это будет Firefox и Chrome. В обоих браузерах консоль есть из коробки.

Начнем с Firefox. Для того, чтобы увидеть ошибку в нашем коде, необходимо открыть консоль браузера. Для этого кликаем в окне браузера правой кнопкой мыши и в контекстном меню выбираем пункт Исследовать элемент.

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

Итак, в открывшейся панели рядом со вкладкой Инспектор есть вкладка Консоль, она то нас и интересует. Переключимся на нее, еще раз обновим страницу и увидим все ошибки JavaScript. В нашем случае это всего одна синтаксическая ошибка, которая произошла в файле scripts.js на первой строке.

Нам остается лишь перейти в данный файл, заметить, что мы забыли заключить строку в кавычки и исправить эту ошибку:

Вот теперь ошибок нет и код успешно выполнился. Кроме встроенной консоли для Firefox можно отдельно установить расширение Firebug, которое, по сути, является аналогом. После установки Firebug можно вызвать, как и встроенную консоль, из контекстного меню или использовать для этого горячую клавишу F12. Вот таким образом выглядит Firebug:

Ну и консоль Хрома:

Она также вызывается из контекстного меню или клавишей F12.

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

На этом статья подошла к концу, теперь вы знаете, как найти в своем коде ошибки JavaScript и исправить их. Если вы хотите больше узнать о JavaScript, тогда рекомендую обратить свое внимание на уроки по JavaScript и отдельный курс по языку JavaScript. Удачи!

JavaScript. Быстрый старт

Изучите основы JavaScript на практическом примере по созданию веб-приложения

JavaScript. Быстрый старт

Изучите основы JavaScript на практическом примере по созданию веб-приложения

Если у вас на мониторе появляется предупреждение о сбое, значит ваш голосовой чат Discord завершил работу по причине ошибки «JavaScript error occurred in the main process». Это одна из многочисленных ошибок операционной системы Windows. Она используется для того, чтобы оповестить о сбое в конкретной области или программе. Многие ошибки могут быть исправлены с помощью простых пошаговых действий. Но некоторые исправить самостоятельно невозможно, необходимо обратиться за квалифицированной помощью специалиста. Ошибку «Javascript error occurred in the main process» и как исправить ее мы сейчас разберем подробнее.

Читайте также:  Заставка для mac os

Скриншот ошибки JavaScript

Причины ошибки в программе Дискорд

Текст ошибки говорит нам – « JavaScript ошибка в главном процессе ». Это означает, что была обнаружена ошибка в процессе выполнения каких-то сценариев (JavaScript).

JavaScript – это основной язык программирования, на котором «написан» мессенджер Discord. Сообщение об ошибке может означать также повреждение файлов программы, установленной на ОС Windows. А в нашем случае это повреждение или отсутствие файлов программы Discord. Обычно этим файлом является discord_voice. Есть еще ряд причин, по которым Виндовс оповещает нас этой ошибкой, например:

  • Конфликт программы Discord с другими программами, установленными на ваш компьютер.
  • Остатки от старой удаленной версии Discord могут быть помехой для работы новой версии.
  • Устаревшие компоненты вашей версии Windows также могут быть причиной появления ошибки.
  • Не исключено, что ваш ПК заражен вирусом.

Ошибка работы приложения Дискорд

Как исправить ошибку «JavaScript error occurred in the main process»

Для исправления этой ошибки нужно на компьютере или ноутбуке открыть папку, куда была произведена установка файлов программы Discord. Нам понадобятся 2 папки программы Дискорд – «AppData» и «AppDataLocal». В некоторых версиях Windows папки могут быть скрыты по умолчанию. Поэтому чтобы открыть нужные нам папки:

  1. Откройте меню «Пуск».
  2. Выберите «Выполнить». Можно также нажать Win+R для быстрого доступа к строке «Выполнить» из рабочего стола.

Окно «Выполнить»

  • В открывшемся окне вводим фразу «%localappdata%» и «%appdata%» для открытия наших скрытых папок. В них нужно удалить все, что связано со словом «Discord».
  • Из программы Discord нужно выйти. Самым удобным способом, в нашей ситуации, это открыть «Диспетчер задач» и «Убить» все процессы, где фигурирует слово «discord». Как это сделать для вашей версии ОС можно посмотреть в поисковике, вбив в строку нужный запрос.
  • Теперь нужно удалить программу и заново установить, т.е. переустановить.
  • Ошибка должна исчезнуть, а программа заработать без сбоев.
  • Другие способы решения ошибки

    Причина, как упоминалось выше, может быть в заражении файлов вирусом. Чтобы это проверить программу Дискорд необходимо закрыть через «Диспетчер задач». Далее запустить ваш антивирус. Если вирусы были найдены, то необходимо их удалить и попытаться снова запустить голосовой чат. Запускать программу следует также от имени администратора, во избежании дополнительных проблем.

    Также использовать лучше всего ту версию Windows, которая поддерживается обновлениями компанией Майкрософт. На сегодняшний день это – 8/8.1/10 версии. Все остальные версии не поддерживаются, а значит обновлений для них больше не создают.

    Причина, почему необходимо использовать новые версии Виндовс, заключается в следующем: Discord – это новое ПО, которое использует новые функции и компоненты. Эти компоненты могут содержать в себе современные технологии, которые старые версии, та же Windows XP или 7, уже попросту «не понимает» — из-за этого и возникают подобные ошибки.

    Ссылка на основную публикацию
    Adblock detector