Что выведет код Middle Промисы и async/await обновлено
try/catch и асинхронность
Вопрос
Что выведет код? По строке на каждый вывод.
function f() {
try {
setTimeout(() => {
try { throw new Error('из таймера'); }
catch (e) { console.log('поймали внутри колбэка'); }
}, 0);
} catch (e) {
console.log('поймали снаружи');
}
return 'вернулись';
}
console.log(f());
console.log('дальше');
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: вернулись, дальше, поймали внутри колбэка. Почему так try/catch ловит только синхронные ошибки своего стека.
Что выведет
вернулись
дальше
поймали внутри колбэка
Разбор
Почему так
try/catch ловит только синхронные ошибки своего стека. Колбэк таймера выполняется позже и в другом стеке - его ошибку ловят внутри колбэка либо глобальным обработчиком. Та же причина, по которой нельзя обернуть в try/catch промис без await.
Вывод
вернулись
дальше
поймали внутри колбэка
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.