Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: promise, error handling, catch, rejection, async

Как распространяются ошибки внутри цепочки промисов?

Вопрос проверяет понимание механизма распространения ошибок в цепочках промисов в JavaScript, что важно для написания надежного асинхронного кода.

Короткий ответ

Ошибки в цепочке промисов распространяются вниз до первого обработчика .catch(). Если промис отклоняется (rejected) или выбрасывает исключение в .then(), управление переходит к ближайшему .catch(). Если .catch() сам возвращает значение, цепочка восстанавливается. Если ошибка не обработана, возникает unhandled rejection.

Длинный ответ

Распространение ошибок в цепочке промисов

Когда промис отклоняется (rejected) или внутри обработчика .then() выбрасывается исключение, JavaScript автоматически передает ошибку по цепочке до первого встречного обработчика .catch(). Это похоже на try...catch, но для асинхронного кода.

Как это работает

Каждый .then() возвращает новый промис. Если предыдущий промис был отклонен, следующий .then() (с обработчиком успеха) будет пропущен, и управление перейдет к .catch(). Если .catch() успешно обработает ошибку и вернет значение, цепочка может продолжиться с помощью дополнительных .then().

Пример кода

fetch('/api/data')
  .then(response => response.json())
  .then(data => {
    if (!data.success) throw new Error('API error');
    return data;
  })
  .catch(err => {
    console.error('Error:', err.message);
    return { fallback: true };
  })
  .then(result => {
    console.log(result); // { fallback: true } или данные
  });

Важные моменты

  • Если .catch() не вернет значение, следующий .then() получит undefined.
  • Если ошибка не обработана ни одним .catch(), возникает событие unhandledrejection в глобальном объекте.
  • Можно размещать несколько .catch() для разных этапов, но обычно достаточно одного в конце цепочки.

Вывод: Используйте .catch() в конце цепочки промисов для централизованной обработки ошибок. Это делает код чище и предотвращает необработанные отклонения, особенно при работе с асинхронными операциями, такими как запросы к API или чтение файлов.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    4

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#promise

#error handling

#catch

#rejection

#async

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию