Необработанный отклонённый промис в Node 22
Вопрос
В обработчике забыли await и catch, промис отклонился, обработчика нет. Что сделает Node 22 по умолчанию?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
- Вызовет
unhandledRejection; без слушателя процесс упадётправильный ответ - Напечатает предупреждение в stderr и продолжит работу, как раньше
- Молча проигнорирует отклонение, промис соберёт GC
- Повторит выполнение промиса один раз, затем упадёт
Разбор
С Node 15 режим по умолчанию --unhandled-rejections=throw: необработанное отклонение превращается в необработанное исключение, и процесс падает, если не подписан process.on("unhandledRejection"). Режим «warn» (только предупреждение) был поведением по умолчанию до 15-й версии.
Правильная стратегия в сервисе: не допускать «висящих» промисов (линтер no-floating-promises), а глобальный обработчик использовать для логирования и корректного завершения, а не для продолжения работы как ни в чём не бывало. Промисы не повторяются сами.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.