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