Sobes.tech
Back to questions
Middle+
5

В чём отличие Promise.all от Promise.allSettled?

Companies where asked
Ifellow

Answer from AI

sobes.tech AI

Promise.all и Promise.allSettled — это методы для работы с несколькими промисами, но они отличаются по поведению при ошибках.

  • Promise.all принимает массив промисов и возвращает новый промис, который:

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

    • Всегда резолвится, когда все промисы завершены, независимо от их результата.
    • Возвращает массив объектов с состоянием каждого промиса (fulfilled или rejected) и соответствующим значением или причиной ошибки.

Пример:

const p1 = Promise.resolve(1);
const p2 = Promise.reject('error');

Promise.all([p1, p2])
  .then(results => console.log(results))
  .catch(error => console.log('Promise.all error:', error));

Promise.allSettled([p1, p2])
  .then(results => console.log('Promise.allSettled results:', results));

Вывод:

Promise.all error: error
Promise.allSettled results: [
  { status: 'fulfilled', value: 1 },
  { status: 'rejected', reason: 'error' }
]

Таким образом, Promise.allSettled полезен, когда нужно дождаться завершения всех промисов и обработать их результаты независимо от ошибок.