Выбор ответа Senior Асинхронные паттерны обновлено

Необработанный отклонённый промис в Node 22

Вопрос

В обработчике забыли await и catch, промис отклонился, обработчика нет. Что сделает Node 22 по умолчанию?

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

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

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

Коротко

Правильный ответ: Вызовет unhandledRejection; без слушателя процесс упадёт. С Node 15 режим по умолчанию --unhandled-rejections=throw: необработанное отклонение превращается в необработанное исключение, и процесс падает, если не подписан process.on("unhandledRejection").

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

  1. Вызовет unhandledRejection; без слушателя процесс упадётправильный ответ
  2. Напечатает предупреждение в stderr и продолжит работу, как раньше
  3. Молча проигнорирует отклонение, промис соберёт GC
  4. Повторит выполнение промиса один раз, затем упадёт

Разбор

С Node 15 режим по умолчанию --unhandled-rejections=throw: необработанное отклонение превращается в необработанное исключение, и процесс падает, если не подписан process.on("unhandledRejection"). Режим «warn» (только предупреждение) был поведением по умолчанию до 15-й версии.

Правильная стратегия в сервисе: не допускать «висящих» промисов (линтер no-floating-promises), а глобальный обработчик использовать для логирования и корректного завершения, а не для продолжения работы как ни в чём не бывало. Промисы не повторяются сами.

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

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

Термины по теме