Выбор ответа Junior Ошибки спрашивают часто обновлено
try/catch вокруг async-вызова без await
Вопрос
loadData это async-функция, которая отклоняется с ошибкой. Почему catch не срабатывает?
function init() {
try {
loadData();
} catch (err) {
showError(err);
}
}
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: loadData() сразу отдаёт промис, а отклонение придёт, когда try уже позади. Синхронный try/catch ловит только исключения, возникшие во время выполнения блока.
Варианты ответа
catchне работает внутри функций, только на верхнем уровне модуля- Async-функции не умеют бросать ошибки, они только возвращают
undefined - Нужно писать
catch (err: Error), иначе тип ошибки не определится и её пропустят loadData()сразу отдаёт промис, а отклонение придёт, когдаtryуже позадиправильный ответ
Разбор
Синхронный try/catch ловит только исключения, возникшие во время выполнения блока. Вызов async-функции просто возвращает промис, ошибки в этот момент нет. Отклонение придёт позже, и его никто не обработает. Исправление: сделать init асинхронной и писать await loadData(), либо loadData().catch(showError). Аннотация типа в catch в JavaScript невозможна, а в TypeScript ничего бы не изменила.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.