Если у вас на мониторе появляется предупреждение о сбое, значит ваш голосовой чат Discord завершил работу по причине ошибки «JavaScript error occurred in the main process». Это одна из многочисленных ошибок операционной системы Windows. Она используется для того, чтобы оповестить о сбое в конкретной области или программе. Многие ошибки могут быть исправлены с помощью простых пошаговых действий. Но некоторые исправить самостоятельно невозможно, необходимо обратиться за квалифицированной помощью специалиста. Ниже разберём, как исправить ошибку Javascript error occured.
Что за ошибка, почему возникает и где встречается
Ситуация: пользователь заходит на сайт Вконтакте и обнаруживает, что видеофайлы и аудиозаписи перестали воспроизводиться. Слева вверху страницы высвечивается надпись «JavaScript error: initAddMedia is not defined», сообщающая о синтаксической ошибке JavaScript: initAddMedia. Причины неполадки, как и текст сообщения могут быть различными, и для решения придется перепробовать несколько методов.
Похожая ошибка встречается и в клиенте Discord: «JavaScript error occurred in the main process» (ошибка возникла в главном процессе).
Независимо от программы и сообщения, она может возникать по нескольким причинам:
- конфликт процесса с прочими запущенными программами;
- оставшиеся файлы старой версии клиента конфликтуют с работающей;
- отсутствие свежих обновлений Windows;
- заражение вирусом.
Быстрое решение проблемы
Для быстрого решения ошибки JavaScript мы отключим автозагрузку в настройках самого Скайпа. А затем добавим программу в папку с автозагрузкой Windows. В 99% случаев этого будет достаточно.
- Открываем Скайп. Нажимаем на значок три точки.
- Выбираем пункт «Настройки».
- Далее переходим на вкладку «Общие» и выключаем опцию «Запускать Скайп автоматически».
Отключаем Запускать Скайп автоматически
- Теперь надо вернуть автозапуск программы.
- Нажимаем «Пуск» и ищем пункт «Автозагрузка». Туда перетаскиваем значок с Рабочего стола или из папки Skype в разделе программ.
Перетаскиваем значок программы в Автозагрузку - Перезапускаем операционную систему и проверяем пропала ли ошибка.
Как устранить ошибку Вконтакте
Есть 3 основных способа исправления неполадки.
Очистка hosts
От пользователя требуется несколько простых действий:
- Открыть Мой компьютер, затем папку Windows/system32, далее папку driver, после etc.
- В каталоге etc открыть файл hosts через любой текстовый редактор (через контекстное меню найти строку «Открыть с помощью» и выбрать соответствующую программу).
- Всё, что должно находиться в файле, это строчка 127.0.0.1 localhost. Если есть что-то еще, то это мусор, препятствующий воспроизведению аудиозаписей и видеофайлов. Необходимо удалить все, оставив строку 127.0.0.1 localhost, затем сохранить изменения.
- Перезагрузить ПК.
Обновление Java и Adobe Flash Player
Следует зайти на официальные сайты Java и Adobe и скачать последние версии программ.
Исправляем ошибку d3dcompiler43 dll
Очистка кэша браузера
Комбинация Ctrl + F5 очистит кэш страницы браузера, открытой в текущий момент. Нужно открыть сайт Вконтакте и нажать эти клавиши. Страница полностью перезагрузится, игнорируя кэширование.
Лучше очистить весь кэш браузера, а не только кэш одной страницы. Для этого нужно нажать комбинацию Ctrl + H, после чего откроется окно с историей браузера. Далее найти строку «очистить историю». Для очистки кэша браузеров можно использовать и сторонние программы, например, Ccleaner.
Асинхронные механизмы — промисы
Для выполнения асинхронных операций в JavaScript лучше использовать не коллбэки а промисы. Тут, в дополнение к улучшенной читабельности кода, имеются и более совершенные механизмы обработки ошибок. А именно, возиться с объектом ошибки, который может попасть в функцию обратного вызова, при использовании промисов не нужно. Здесь для этой цели предусмотрен специальный блок catch. Он перехватывает все ошибки, произошедшие в промисах, которые находятся до него, или все ошибки, которые произошли в коде после предыдущего блока catch. Обратите внимание на то, что если в промисе произошла ошибка, для обработки которой нет блока catch, это не остановит выполнение скрипта, но сообщение об ошибке будет не особенно удобочитаемым.
В результате можно порекомендовать всегда, при работе с промисами, использовать блок catch. Взглянем на пример.
Как устранить ошибку в Дискорде
В клиенте Discord иногда возникает неполадка «JavaScript error occurred in the main process». Ниже будут описаны два способа борьбы с ней при запуске Дискорда. Хотя бы один метод точно сработает, поэтому если не помог один, обязательно нужно пробовать второй.
Обновление клиента
Иногда эта неполадка возникает из-за необходимости обновления, при том, что автоматическое обновление программы по каким-то причинам было отключено. Следует обновить клиент самому, следуя указаниям ниже:
- Открыть Диспетчер задач, отключить все процессы, связанные с Дискордом.
- Нажать комбинацию Win + R и набрать %AppData%.
- Выйти назад из Roaming в AppData.
- Далее зайти в папку Local и найти в ней папку Discord.
- Два раза нажать на Update.exe, инициирующий обновление программы.
- Включить Дискорд.
После выполнения всех шагов, при запуске программа станет обновляться. Когда установка обновлений завершится, следует проверить, перестала ли возникать эта неполадка. Если она продолжает появляться, необходимо приступить ко второму способу.
Переустановка клиента
Если первый способ не помог (он действительно помогает только в меньшинстве случаев), остается только полное удаление программы и ее чистая установка. Для этого нужно совершить следующую последовательность действий:
- Открыть Диспетчер задач, отключить все процессы, связанные с Дискордом.
- В меню Панели управления найти пункт Программы и компоненты, открыть.
- Найти строку со словом Discord и удалить, после чего повторить пункты 2-4 из предыдущего способа, чтобы найти каталог Discord и удалить его. Затем выйти в AppData, зайти в Roaming и тоже удалить папку под названием Discord.
- Установить клиент Discord заново.
Как устранить ошибку Missing operating system
Другие способы
Если ошибка всё же не уходит, то остается проверить систему на предмет вирусов и установить свежие обновления системы Windows.
Если же JavaScript error возникает в других программах или в интернете, что наблюдается намного реже, то все вышеописанные способы будут работать. В случае с приложениями, можно выполнять те же действия, что и с Дискордом, но для нужной программы.
Системные ошибки¶
Системные ошибки генерируются, когда исключения выпадают в среде выполнения программы. Обычно это операционные ошибки, которые случаются, когда приложение эксплуатирует ограничения ОС, например, попытка прочесть файл, которого не существует, или когда пользователь не имеет достаточных прав.
Системные ошибки обычно генерируются на уровне системных вызовов: полный список кодов ошибок и их значений доступен после запуска man 2 intro или man 3 errno на большинстве Unix-систем, или же онлайн.
В Node.js системные ошибки представляют собой объекты Error с дополнительными свойствами.
Класс System Error¶
error.code error.errno
Возвращает строку, содержащую код ошибки, которая всегда представляет собой E с последующим набором заглавных букв и может ссылаться на man 2 intro.
Свойства error.code и error.errno дополняют друг друга и возвращают одинаковое значение.
error.syscall¶
Возвращает строку, описывающую неудавшийся системный вызов.
Основные системные ошибки¶
Этот список не является полным, но содержит в себе большую часть основных системных ошибок, с которыми девелопер чаще всего встречается при написании программы на Node.js.
EACCES (Отказано в доступе) Попытка получить доступ к файлу, который был запрещен правами доступа. EADDRINUSE (Адрес уже используется) Попытка привязать сервер (net, htttp, https) к локальному адресу прошла неудачно по причине того, что другой сервер на локальной системе уже занимает этот адрес. ECONNREFUSED (В соединении отказано) Соединение не может быть произведено, так как целевой компьютер активно отклоняет его. Обычно это является результатом попыток подсоединиться к неактивному серверу на чужом хосте. ECONNRESET (Соединение сброшено пиром) Соединение принудительно закрыто пиром. Обычно является результатом потери подключения на удаленном сокете по причине timeout или reboot. В основном встречается на модулях http и net. EEXIST (Файл существует) В ходе выполнения операции был получен существующий файл, когда требовалось получить несуществующий. EISDIR (Это директория) Операция ожидала файл, но данный путь является путем к директории. EMFILE (Слишком много открытых файлов в системе) Набрано максимальное количество файловых дескрипторов, разрешенных системой, запросы к другим дескрипторами не могут быть выполнены, пока хотя бы один не будет закрыт. Такое случается при открытии большого количества файлов одновременно, особенно на системах (например, OS X), которые имеют малый лимит на файловые дескрипторы для процессов. Для настройки лимита, запустите ulimit -n 2048 в той же оболочке, где запускается процесс Node.js. ENOENT (Нет такого файла или директории) Обычно выпадает вследствие операций fs для отображения, что копмонент заданного пути не существует – файл или директория не могут быть найдены по заданному пути. ENOTDIR (Не является директорией) Компонент заданного пути существует, но не является директорией. Часто выпадает из fs.readdir. ENOTEMPTY (Директория не является пустой) Целью операции была пустая директория, а была получена не пустая (часто fs.unlink). EPERM (Операция не разрешена) Попытка произвести операцию, которая требует особых прав на доступ. EPIPE (Проблемы с каналом) Запись в канал, сокет или FIFO, в которых нет процесса для чтения данных. Обычно встречается на стороне net и http, показывая, что удаленная стороны стрима, в которую идет запись, закрыта. ETIMEDOUT (Вышло время выполнения операции) Подключение или отправка запроса не удались по причине того, что сторона, к которой идет подключение, не отвечает. Встречается в net или http, часто сигнализирует о том, что socket.end() был вызван неправильно.
Другие варианты ошибки
Способы исправления всех ошибок идентичны, но иногда исправлять их не обязательно, главное понять, о чем именно предупреждает приложение или сервис:
- “A fatal JavaScript error occurred” (возникла фатальная ошибка) – возникает в Discord, приложение при этом вылетает. Исправляется обновлением или полной переустановкой клиента. Если это не помогает, нужно проверить программу антивирусом, предварительно отключив все процессы Discord, затем запустить программу от имени администратора.
- “JavaScript error: data is not a function” (данные не являются функцией) – возникает в ВК, не открываются сообщения. Обычно помогает очистка кэша браузера.
- “JavaScript error: wall is not defined” (стена не определена) – возникает Вконтакте при обновлении страницы, перестает работать стена. Решается обновлением Java, Adobe Flash Player, чисткой файла hosts, чисткой кэша браузера и перезагрузкой ПК.
- “JavaScript error: poster is not defined” (постер не определен), “JavaScript error: mediaselector is not defined” (медиаселектор не определен) – ошибки Вконтакте, при этом нельзя посмотреть новости и сообщения. Обычно решаются обновлением браузера, Java или Flash Player.
- “JavaScript error: scrollnode is not defined” (узел не определен) – ошибка ВК. Исправить ее нельзя, неполадки на стороне сервера.
- “JavaScript error: profile is not defined” (профиль не определен) – ошибка ВК, некорректно открываются страницы Вконтакте. Для исправления нужно очистить кэш, файл hosts и перезагрузить компьютер.
Что делать, если узел службы локальная система грузит диск и процессор
В целом способы исправления всех ошибок JavaScript идентичны, они актуальны и для таких расшифровок: timespent is not defined, mutations are not initialized, uisearch is not defined, upload is not defined, object is not a function, getaudioplayer updatecurrentplaying и других.
Класс SyntaxError¶
Подкласс Error, который показывает, что программа не валидна для JavaScript. Эти ошибки генерируются и распространяются только в результате оценки кода. Оценка кода может быть вызвана eval, Function, require или vm. Эти ошибки почти всегда являются индикаторами неправильно работающей программы.
try { require(‘vm’).runInThisContext(‘binary ! isNotOk’); } catch (err) { // err will be a SyntaxError }
Экземпляры SyntaxError не восстанавливаются в контесте, в котором были созданы. Они могут только улавливаться другим контекстом.
Маршрутизация
Теперь, когда наш объект ошибки готов к использованию, нужно настроить структуру маршрутов. Как было сказано выше, нам требуется реализовать унифицированный подход к обработке ошибок, позволяющий одинаково обрабатывать ошибки для всех маршрутов. По умолчанию фреймворк Express.js не вполне поддерживает такую схему работы. Дело в том, что все его маршруты инкапсулированы.
Для того чтобы справиться с этой проблемой, мы можем реализовать собственный обработчик маршрутов и определять логику маршрутов в виде обычных функций. Благодаря такому подходу, если функция маршрута (или любая другая функция) выбрасывает ошибку, она попадёт в обработчик маршрутов, который затем может передать её клиентской части приложения. При возникновении ошибки на сервере мы планируем передавать её во фронтенд в следующем формате, полагая, что для этого будет применяться JSON-API:
Если на данном этапе происходящие кажется вам непонятным — не беспокойтесь — просто продолжайте читать, пробуйте работать с тем, о чём идёт речь, и постепенно вы во всём разберётесь. На самом деле, если говорить о компьютерном обучении, здесь применяется подход «сверху-вниз», когда сначала обсуждаются общие идеи, а потом осуществляется переход к частностям.
Вот как выглядит код обработчика маршрутов.
Полагаем, комментарии в коде достаточно хорошо его поясняют. Надеемся, читать их удобнее, чем объяснения подобного кода, данные после него.
Теперь взглянем на файл маршрутов.
В этих примерах с самими запросами ничего не делается. Тут просто рассматриваются разные сценарии возникновения ошибок. Итак, например, запрос GET /city попадёт в функцию const GET = req =>…, запрос POST /city попадёт в функцию const POST = req =>… и так далее. Эта схема работает и при использовании параметров запросов. Например — для запроса вида GET /city?startsWith=R. В целом, здесь продемонстрировано, что при обработке ошибок, во фронтенд может попасть либо общая ошибка, содержащая лишь предложение попробовать снова или связаться с владельцем сервера, либо ошибка, сформированная с использованием конструктора CustomError, которая содержит подробные сведения о проблеме. Данные общей ошибки придут в клиентскую часть приложения в таком виде:
Конструктор CustomError используется так:
Это даёт следующий JSON-код, передаваемый во фронтенд:
Теперь, когда мы основательно потрудились над серверной частью приложения, в клиентскую часть больше не попадают бесполезные логи ошибок. Вместо этого клиент получает полезные сведения о том, что пошло не так.
Не забудьте о том, что здесь лежит репозиторий с рассматриваемым здесь кодом. Можете его загрузить, поэкспериментировать с ним, и, если надо, адаптировать под нужды вашего проекта.
Теперь пришла пора описать третью часть нашей системы обработки ошибок, касающуюся фронтенда. Тут нужно будет, во-первых, обрабатывать ошибки, возникающие в клиентской части приложения, а во-вторых, понадобится оповещать пользователя об ошибках, возникающих на сервере. Разберёмся сначала с показом сведений о серверных ошибках. Как уже было сказано, в этом примере будет использована библиотека React.