Выбор ответа Middle Асинхронные паттерны обновлено
return промиса без await внутри try
Вопрос
Что выведет код?
async function f() {
try {
return Promise.reject(new Error('boom'));
} catch (e) {
return 'caught';
}
}
f().then(console.log, (e) => console.log('rejected', e.message));
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: rejected boom. return promise без await сразу выходит из try: функция возвращает промис, который отклонится позже, уже вне блока. catch внутри f не срабатывает, а внешний обработчик получает ошибку.
Варианты ответа
caughtrejected boomправильный ответundefined- Необработанная ошибка, процесс упадёт
Разбор
return promise без await сразу выходит из try: функция возвращает промис, который отклонится позже, уже вне блока. catch внутри f не срабатывает, а внешний обработчик получает ошибку. С return await вывод был бы caught.
caughtэто поведение версии сawait.- Значение есть: промис отклонён с ошибкой.
- Процесс не падает: у внешнего
thenесть обработчик отклонения.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.