Вступить в клуб →
средняявопросАсинхронность и event loop

try/catch вокруг колбэка таймера не ловит исключение

В воркере написан такой код:

try {
  setTimeout(() => {
    throw new Error('boom');
  }, 100);
} catch (err) {
  logger.error({ err }, 'задача упала');
}

Через 100 мс исключение действительно выбрасывается. Что произойдёт?

  • Ошибка попадёт в `catch` и будет записана в лог: блок `try` охватывает и вызов `setTimeout`, и его колбэк
  • Ошибка молча проглотится: исключения в колбэках таймеров Node.js подавляет, чтобы один таймер не ронял процесс
  • `catch` не сработает: колбэк уже выполняется вне блока `try`, и процесс упадёт по `uncaughtException`
  • Ошибка превратится в отклонённый промис и попадёт в `unhandledRejection`: таймеры реализованы поверх промисов

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела