Почему Promise.race([]) не вызывает then и catch?

Будет выведено только sync. Promise.race с пустым iterable остаётся pending: ни один участник не может определить его результат. Await такого Promise не продолжит выполнение сам по себе.

Короткий ответ

Что ответить на собеседовании

Будет выведено только sync. Promise.race с пустым iterable остаётся pending: ни один участник не может определить его результат. Await такого Promise не продолжит выполнение сам по себе.

Подробный разбор

Ответ с пояснениями

Условие

Выполните Promise.race([]).then(()=>console.log('ok'),()=>console.log('error')); console.log('sync');. Есть ли завершение пустой гонки и что произойдёт с await Promise.race([])?

Ответ

Будет выведено только sync. Promise.race с пустым iterable остаётся pending: ни один участник не может определить его результат. Await такого Promise не продолжит выполнение сам по себе.

Это отличается от Promise.all([]), который успешно выполняется пустым массивом. Если пустой набор возможен в бизнес-логике, обработайте его явно: верните договорённое значение либо ошибку аргумента. Pending Promise сам по себе не означает активную работу и не гарантирует удержание процесса Node.js; это состояние результата, а не таймер.

Источник: developer.mozilla.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее