Выбор ответа Middle Промисы и async/await обновлено

Необработанное отклонение в Node.js

Вопрос

Что по умолчанию произойдёт в Node.js 22, если промис отклонился и у него нет обработчика?

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

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

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

Коротко

Правильный ответ: Процесс упадёт: с Node 15 по умолчанию --unhandled-rejections=throw. Начиная с Node 15 необработанное отклонение по умолчанию превращается в неперехваченное исключение, и процесс падает с ненулевым кодом.

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

  1. Ничего: ошибка молча проглатывается, а промис остаётся отклонённым
  2. Только предупреждение в консоли, процесс продолжает работу как обычно
  3. Промис будет автоматически повторён один раз, а затем ошибка уйдёт в лог
  4. Процесс упадёт: с Node 15 по умолчанию --unhandled-rejections=throwправильный ответ

Разбор

Начиная с Node 15 необработанное отклонение по умолчанию превращается в неперехваченное исключение, и процесс падает с ненулевым кодом. До Node 15 было только предупреждение, отсюда частое заблуждение. Перехватить можно событием process.on('unhandledRejection'), но правильнее не оставлять промисы без catch. В браузере в такой ситуации срабатывает событие unhandledrejection и ошибка выводится в консоль, страница продолжает работать.

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

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

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