Получить доступ

Что такое Promise и чем отличаются Promise.all, allSettled, race и any?

JuniorАсинхронность и event loop
Ещё спрашивают так:
  • Какие состояния бывают у промиса?
Коротко

Promise — объект будущего результата в одном из состояний: pending, fulfilled, rejected; состояние меняется один раз. then/catch/finally возвращают новый промис — получаются цепочки. all — все успешны или первая ошибка; allSettled — дождаться всех и получить статусы; race — первый завершившийся (успех или ошибка); any — первый успешный.

  • Ошибка в then пропускает последующие then до ближайшего catch
  • Необработанный rejected — событие unhandledrejection
  • Promise.all не отменяет остальные запросы — для отмены AbortController

А ещё Обёртка над колбэчным API: new Promise((resolve, reject) => ...)

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

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

Event loop: стек, микро- и макрозадачи

Подробно

Зачем. Колбэки вкладываются друг в друга («ад колбэков»), ошибки приходится передавать вручную. Промисы дают цепочки и единый канал ошибок.

Цепочка: значение, возвращённое из then, становится результатом следующего промиса; возвращённый промис «разворачивается»; брошенное исключение превращается в rejected.

Комбинаторы:

результатпри ошибке
allмассив значенийотклоняется первой ошибкой
allSettledмассив {status, value/reason}не отклоняется
raceпервый завершившийсяесли первым была ошибка — она
anyпервый успешныйAggregateError, если все упали

Все комбинаторы ждут промисы, которые уже запущены: «отменить» остальные они не могут — нужен AbortController для fetch.

Пример

const [user, orders] = await Promise.all([fetchUser(id), fetchOrders(id)]);

const results = await Promise.allSettled(urls.map(u => fetch(u)));
const ok = results.filter(r => r.status === "fulfilled").map(r => r.value);

const timeout = ms => new Promise((_, rej) => setTimeout(() => rej(new Error("timeout")), ms));
await Promise.race([fetch(url), timeout(3000)]);

Что хотят услышать

  • Состояния и цепочки.
  • Различие четырёх комбинаторов.
  • Обработка ошибок.

Что спросят дальше

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем