try/catch вокруг колбэка таймера не ловит исключение
В воркере написан такой код:
try {
setTimeout(() => {
throw new Error('boom');
}, 100);
} catch (err) {
logger.error({ err }, 'задача упала');
}
Через 100 мс исключение действительно выбрасывается. Что произойдёт?
- Ошибка попадёт в `catch` и будет записана в лог: блок `try` охватывает и вызов `setTimeout`, и его колбэк
- Ошибка молча проглотится: исключения в колбэках таймеров Node.js подавляет, чтобы один таймер не ронял процесс
- `catch` не сработает: колбэк уже выполняется вне блока `try`, и процесс упадёт по `uncaughtException`
- Ошибка превратится в отклонённый промис и попадёт в `unhandledRejection`: таймеры реализованы поверх промисов
