Распознавание ошибок

Распознавание ошибок.

Несмотря на упомянутые ограничения, рабочие процессы все же представляют собой весьма гибкий и мощный механизм. Внутри рабочих процессов можно использовать функции, методы и целые API. Учитывая то, насколько сложными рабочие процессы могут становиться при добавлении в них всех этих возможностей, без функциональности обработки ошибок не обойтись. API Web Workers (Рабочие процессы) включает в себя специальное событие error, позволяющее распознавать ошибки и возвращать все доступные сведения о текущей ситуации. Это событие срабатывает на объекте Worker в главном коде при возникновении любой ошибки. Оно предоставляет информацию посредством трех свойств: message, filename и lineno. Свойство message выдает сообщение об ошибке. Это строка, благодаря которой мы узнаем, что пошло не так. Свойство filename содержит имя файла, код в котором вызвал ошибку. Его полезно применять, когда внутри рабочего процесса загружаются внешние файлы (пример этого мы рассмотрим чуть позже). Наконец, свойство lineno возвращает номер строки, в которой произошла ошибка. Давайте создадим код, который будет показывать возвращенную рабочим процессом ошибку.

Листинг 14.5. Использование события error

Function initiate(){

Databox=document. getElementById(‘databox’); var button=document. getElementById(‘button’); button. addEventListener(‘click’, send, false);

Worker=new Worker(‘worker. js’); worker. addEventListener(‘error’, error, false);

}

Function send(){

Var name=document. getElementById(‘name’).value; worker. postMessage(name);

Function error(e){

Databox. innerHTML=’Ошибка: ‘+e. message+'<br>’; databox. innerHTML+^Имя файла: ‘+e. filename+'<br>’; databox. innerHTML+^Номер строки: ‘+e. lineno;

}

Window. addEventListener(‘load’, initiate, false);

Код в этом примере очень похож на код из листинга 14.3. Здесь мы создаем рабочий процесс, но используем только событие error, поскольку на этот раз не собираемся слушать ответы рабочего процесса — нас интересуют только ошибки. Конечно, пользы от этого кода никакой, однако он все же демонстрирует, каким образом возвращаются ошибки и какая информация в подобных ситуациях доступна.

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

Листинг 14.6. Неработающий рабочий процесс addEventListener(‘message’, received, false);

Function received(e){ test();

}

В этом рабочем процессе все так же нужно прослушивать событие message, для того чтобы не пропустить сообщение от главного кода, с которого начинается работа. Когда сообщение приходит, происходит вызов функции received(), и она вызывает несуществующую функцию test(), генерируя тем самым простейшую ошибку.

Когда возникает ошибка, в главном коде срабатывает событие error и вызывается функция error(), которая выводит на экран значения трех свойств объекта события. Изучите код в листинге 14.5, для того чтобы понять, как функция принимает и обрабатывает эту информацию.

В этом примере мы используем HTML-документ и правила CSS из листингов 14.1 и 14.2. Скопируйте код из листинга 14.5 в файл webworkers. js, а код из листинга 14.6 — в файл worker. js. Откройте шаблон из листинга 14.1 в своем браузере и отправьте с помощью формы любую строку. На экране появится информация об ошибке, возвращенной рабочим процессом.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *