JavaRush /Курсы /Модуль 1: Web Core /Обработка ошибок

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

Модуль 1: Web Core
22 уровень , 6 лекция
Открыта

7.1 Использование колбеков

Обработка ошибок — это важный аспект написания надежного и устойчивого к сбоям кода. В асинхронном JavaScript-коде, ошибки могут возникать как в синхронных, так и в асинхронных операциях. Правильное управление ошибками помогает избежать неожиданных сбоев и предоставляет пользователям полезные сообщения об ошибках. Рассмотрим несколько методов обработки ошибок в асинхронном коде, включая колбэки, промисы и async/await.

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

Пример:

JavaScript
    
      function fetchData(callback) {
        setTimeout(() => {
          const error = Math.random() > 0.5 ? new Error('Failed to fetch data') : null;
          const data = error ? null : { id: 1, name: 'John Doe' };
          callback(error, data);
        }, 1000);
      }

      fetchData((error, data) => {
        if (error) {
          console.error('Error:', error);
        } else {
          console.log('Data:', data);
        }
      });
    
  

7.2 Использование промисов

Обработка ошибок с использованием промисов

Промисы предоставляют более структурированный способ работы с асинхронным кодом. Ошибки обрабатываются с помощью метода catch.

Пример:

JavaScript
    
      function fetchData() {
        return new Promise((resolve, reject) => {
          setTimeout(() => {
            const error = Math.random() > 0.5 ? new Error('Failed to fetch data') : null;
            if (error) {
              reject(error);
            } else {
              resolve({ id: 1, name: 'John Doe' });
            }
          }, 1000);
        });
      }

      fetchData()
        .then(data => console.log('Data:', data))
        .catch(error => console.error('Error:', error));
    
  

Обработка ошибок с использованием async/await

async/await предоставляет синтаксически удобный способ работы с асинхронным кодом, делая его более читабельным и похожим на синхронный. Ошибки в асинхронных функциях могут быть обработаны с помощью конструкции try...catch.

Пример:

JavaScript
    
      async function fetchData() {
        return new Promise((resolve, reject) => {
          setTimeout(() => {
            const error = Math.random() > 0.5 ? new Error('Failed to fetch data') : null;
            if (error) {
              reject(error);
            } else {
              resolve({ id: 1, name: 'John Doe' });
            }
          }, 1000);
        });
      }

      async function loadData() {
        try {
          const data = await fetchData();
          console.log('Data:', data);
        } catch (error) {
          console.error('Error:', error);
        }
      }

      loadData();
    
  

7.3 Глобальная обработка ошибок

Для глобальной обработки ошибок в асинхронном коде можно использовать window.onError и window.onUnhandledRejection.

Пример для window.onError:

JavaScript
    
      window.onerror = function (message, source, lineno, colno, error) {
        console.error('Global error handler:', error);
      };

      setTimeout(() => {
        throw new Error('Test error');
      }, 1000);
    
  

Пример для window.onunhandledrejection:

JavaScript
    
      window.onunhandledrejection = function (event) {
        console.error('Unhandled rejection:', event.reason);
      };

      Promise.reject(new Error('Test unhandled rejection'));
    
  

7.4 Примеры использования

1. Асинхронные HTTP-запросы с Fetch и обработка ошибок:

JavaScript
    
      async function fetchData() {
        try {
          const response = await fetch('https://jsonplaceholder.typicode.com/posts/1');
          if (!response.ok) {
            throw new Error('Network response was not ok');
          }
          const data = await response.json();
          console.log('Data:', data);
        } catch (error) {
          console.error('Fetch error:', error);
        }
      }

      fetchData();
    
  

2. Параллельное выполнение запросов с Promise.all и обработка ошибок:

JavaScript
    
      async function fetchMultipleData() {
        try {
          const [response1, response2] = await Promise.all([
            fetch('https://jsonplaceholder.typicode.com/posts/1'),
            fetch('https://jsonplaceholder.typicode.com/posts/2')
          ]);

          if (!response1.ok || !response2.ok) {
            throw new Error('One of the responses was not ok');
          }

          const data1 = await response1.json();
          const data2 = await response2.json();

          console.log('Data 1:', data1);
          console.log('Data 2:', data2);
        } catch (error) {
          console.error('Fetch multiple data error:', error);
        }
      }

      fetchMultipleData();
    
  
1
Задача
Модуль 1: Web Core, 22 уровень, 6 лекция
Недоступна
Ошибки в async/await
Ошибки в async/await
1
Задача
Модуль 1: Web Core, 22 уровень, 6 лекция
Недоступна
Глобальные ошибки
Глобальные ошибки
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Gans Electro Уровень 4
25 ноября 2025
+ лекция в копилке