Как обработать ошибку в Promise без catch, используя только then?

Как в промисах обработать ошибку только с помощью then, без catch Работа с Promise в JavaScript и асинхронным кодом Метод then принимает два колбэка: один вызывается при успешном выполнении, второй — при ошибке Для…

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

Что ответить на собеседовании

Как в промисах обработать ошибку только с помощью then, без catch Работа с Promise в JavaScript и асинхронным кодом Метод then принимает два колбэка: один вызывается при успешном выполнении, второй — при ошибке Для обработки ошибки вместо catch можно указать второй аргумент метода then Пример: promise.then(res => {...}, err => {...}) Это позволяет обрабатывать ошибки непосредственно внутри цепочки, не создавая отдельный catch Минус такого решения — более низкая читаемость; в коде его используют реже Вариант подходит, когда нужна компактная обработка ошибок без отдельного блока catch

Подробный разбор

Ответ с пояснениями

Как в промисах обработать ошибку только с помощью then, без catch

  • Работа с Promise в JavaScript и асинхронным кодом
  • Метод then принимает два колбэка: один вызывается при успешном выполнении, второй — при ошибке
  • Для обработки ошибки вместо catch можно указать второй аргумент метода then
  • Пример: promise.then(res => {...}, err => {...})
  • Это позволяет обрабатывать ошибки непосредственно внутри цепочки, не создавая отдельный catch
  • Минус такого решения — более низкая читаемость; в коде его используют реже
  • Вариант подходит, когда нужна компактная обработка ошибок без отдельного блока catch

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

Основной ответ

Для обработки ошибки в промисах без catch используется второй параметр метода then. Он предназначен именно для обработки ошибок: первый аргумент then получает функцию успешного выполнения, а второй — функцию, вызываемую при ошибке. По смыслу это соответствует применению catch, однако цепочка, построенная исключительно на then, обычно читается сложнее.

Ключевые моменты

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

Практический контекст

В JavaScript (ES6+) для обработки исключений, связанных с промисами, обычно выбирают конструкцию .then(...).catch(...) либо async/await вместе с try/catch. Но если правила проекта или принятый стиль требуют использовать только then, код можно оформить следующим образом:

fetch(url)
.then(
response => response.json(),
error => {
console.error('Ошибка сети или загрузки:', error);
// Можно вернуть fallback-значение или повторно бросить ошибку
}
)
.then(
data => console.log('Данные обработаны', data),
error => console.error('Ошибка при парсинге JSON:', error)
);

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

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

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку