Gernar
HTTP, API и сеть

Использовал ли методы then и catch

Разбор вопроса «Использовал ли методы then и catch» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.

Вопрос

Использовал ли методы then и catch

Профессия

Frontend Developer

Что хочет услышать интервьюер

Интервьюер хочет убедиться, что кандидат понимает асинхронное программирование в JavaScript и умеет работать с промисами. Также важно, чтобы кандидат мог объяснить, как обрабатывать ошибки в асинхронном коде.

Ключевые тезисы

  • Методы then и catch используются для работы с промисами в JavaScript. then обрабатывает успешное выполнение промиса, а catch — ошибки.
  • Пример использования: fetch('url').then(response => response.json()).catch(error => console.error(error));
  • Важно понимать, что then возвращает новый промис, что позволяет строить цепочки вызовов.

Подробный ответ

Методы then и catch являются основными инструментами для работы с промисами (Promise) в JavaScript. Промисы представляют асинхронные операции, которые могут завершиться успешно (resolve) или с ошибкой (reject). Метод then используется для обработки успешного выполнения промиса. Он принимает два необязательных аргумента: функцию для обработки успешного результата и функцию для обработки ошибки (хотя последнюю чаще выносят в catch). Метод catch предназначен исключительно для перехвата ошибок, которые могут возникнуть в цепочке промисов. Оба метода возвращают новый промис, что позволяет строить цепочки вызовов (chaining), делая код более читаемым и удобным для поддержки. Например, fetch API возвращает промис, который можно обработать с помощью then и catch. Важно помнить, что catch перехватывает ошибки не только в исходном промисе, но и во всех then перед ним.

Практические примеры

Пример 1

Пример 1: Обработка успешного запроса и ошибки. fetch('https://api.example.com/data').then(response => response.json()).then(data => console.log(data)).catch(error => console.error('Ошибка:', error));

Пример 2

Пример 2: Цепочка then с обработкой ошибок в середине. fetch('https://api.example.com/data').then(response => { if (!response.ok) throw new Error('Ошибка сети'); return response.json(); }).then(data => processData(data)).catch(error => console.error('Ошибка обработки:', error));

Пример 3

Пример 3: Использование finally для выполнения кода после завершения промиса. fetch('https://api.example.com/data').then(response => response.json()).catch(error => console.error(error)).finally(() => console.log('Запрос завершен'));

Частые ошибки

  • Пропуск catch в цепочке промисов, что приводит к необработанным ошибкам (unhandled promise rejection).
  • Использование вложенных then вместо цепочки (Promise Hell), что усложняет чтение и поддержку кода.
  • Непонимание того, что then возвращает новый промис, и попытка использовать результат сразу без then.

Связанные темы

  • Async/await - современный синтаксис для работы с асинхронным кодом, который делает его более читаемым.
  • Promise.all и Promise.race - методы для работы с несколькими промисами параллельно.
  • Event Loop - механизм, который управляет выполнением асинхронного кода в JavaScript.

Follow-up вопросы

Чем отличается then от catch в работе с промисами?

Уровень: basic

Метод then вызывается при успешном выполнении промиса и принимает функцию-обработчик для результата. Метод catch вызывается при ошибке и обрабатывает её. Оба возвращают новый промис, что позволяет строить цепочки.

Можно ли использовать then после catch в цепочке промисов?

Уровень: intermediate

Да, можно. Если catch обработал ошибку, следующий then выполнится, так как catch возвращает новый успешный промис. Это полезно для восстановления после ошибок.

Как обработать несколько промисов параллельно?

Уровень: intermediate

Для параллельного выполнения промисов используют Promise.all (ожидает все промисы) или Promise.race (ожидает первый завершённый). then/catch применяются к результату этих методов.

Что такое finally в контексте промисов?

Уровень: intermediate

Метод finally выполняется в любом случае — после then или catch. Он полезен для очистки ресурсов (например, закрытия соединений), но не получает аргументов.

Как избежать «ада промисов» (Promise Hell)?

Уровень: advanced

Чтобы избежать вложенных then/catch, используют цепочки (chaining) или async/await. Это делает код плоским и читаемым. Например, async-функции автоматически преобразуют промисы.

Содержание