Sobes.tech
Назад к вопросам
Middle
2

Расскажите про методы Promise.all, Promise.race и Promise.allSettled. В чём их отличие?

Компании, где спрашивали
AstonAston

Ответ от нейросети

sobes.tech AI

Методы Promise.all, Promise.race и Promise.allSettled — это разные способы работы с несколькими промисами одновременно.

  • Promise.all(iterable) принимает массив (или другой итерируемый объект) промисов и возвращает новый промис, который:

    • резолвится, когда все промисы из массива успешно завершились, возвращая массив результатов в том же порядке;
    • отклоняется сразу, если хотя бы один из промисов отклоняется, с ошибкой этого промиса.
  • Promise.race(iterable) возвращает промис, который резолвится или отклоняется как только первый из переданных промисов завершится (успешно или с ошибкой). То есть "гонка" между промисами.

  • Promise.allSettled(iterable) возвращает промис, который резолвится, когда все промисы завершатся (независимо от результата). В отличие от Promise.all, он не отклоняется при ошибках, а возвращает массив объектов с информацией о статусе каждого промиса:

    [
      { status: 'fulfilled', value: ... },
      { status: 'rejected', reason: ... },
      ...
    ]
    

Итог:

  • Promise.all — ждёт успешного завершения всех, или сразу отклоняется при ошибке.
  • Promise.race — ждёт первого завершившегося (успешно или с ошибкой).
  • Promise.allSettled — ждёт завершения всех, независимо от успеха или ошибки, и возвращает подробный статус каждого.