Использовал ли методы 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-функции автоматически преобразуют промисы.
Из чего состоит REST API
Разбор вопроса «Из чего состоит REST API» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.
Используешь ли Composite API
Разбор вопроса «Используешь ли Composite API» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.