Выбор ответа Junior Ошибки и логирование спрашивают часто обновлено

try/catch и ошибка в setTimeout

Вопрос

Что произойдёт при запуске?

try {
  setTimeout(() => { throw new Error('late'); }, 0);
} catch (e) {
  console.log('caught');
}

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Не поймается, процесс упадёт с uncaught exception. Блок try завершился сразу после регистрации таймера.

Варианты ответа

  1. Не поймается, процесс упадёт с uncaught exceptionправильный ответ
  2. Выведется caught, try ловит ошибку колбэка
  3. Ошибка будет молча проигнорирована
  4. Выведется caught, но только в строгом режиме

Разбор

Блок try завершился сразу после регистрации таймера. Колбэк запускается позже из event loop, с другим стеком, где этого try уже нет. Исключение никто не ловит, Node завершает процесс с кодом 1.

  • caught был бы для синхронного броска или для await внутри try.
  • Игнорирования нет: непойманное исключение роняет процесс.
  • Строгий режим на это не влияет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.