> Как обрабатывать ошибки в промисах в JavaScript? (JavaScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: EPAM, Яндекс

Стек: JavaScript

> Пример ответа

Обработка ошибок в промисах в JavaScript осуществляется двумя основными способами: через метод .catch() и с помощью try...catch в асинхронных функциях.

  1. Метод .catch()
    Если промис переходит в состояние rejected, управление передаётся в ближайший .catch() в цепочке. Это позволяет централизованно обрабатывать ошибки для нескольких последовательных промисов:

    JAVASCRIPT
    fetch('/api/data')
    .then(response => response.json())
    .then(data => console.log(data))
    .catch(error => console.error('Ошибка:', error));

    Важно: .catch() обрабатывает как ошибки самого промиса, так и исключения, возникшие в предыдущих .then().

  2. try...catch с async/await
    В асинхронных функциях можно использовать синтаксис, похожий на синхронный код:

    JAVASCRIPT
    async function getData() {
    try {
    const response = await fetch('/api/data');
    const data = await response.json();
    console.log(data);
    } catch (error) {
    console.error('Ошибка:', error);
    }
    }

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

  3. Глобальная обработка необработанных ошибок
    Для предотвращения «проглатывания» ошибок используйте событие unhandledrejection:

    JAVASCRIPT
    window.addEventListener('unhandledrejection', event => {
    console.error('Необработанная ошибка промиса:', event.reason);
    });

Рекомендации:

  • Всегда завершайте цепочку промисов .catch().

  • В async/await оборачивайте вызовы в try...catch, особенно при работе с внешними API.

  • Не смешивайте .catch() и try...catch в одном потоке - это усложняет отладку.

  • Для критических операций (например, загрузка данных) добавляйте fallback-значения в .catch() или catch-блоке.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью