Будет выведено только sync. Promise.race с пустым iterable остаётся pending: ни один участник не может определить его результат. Await такого Promise не продолжит выполнение сам по себе.
Почему Promise.race([]) не вызывает then и catch?
Будет выведено только 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.