Spec-Zone.ru › JavaScript

Promise.allSettled()

Базовая версия Широко доступна

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 2020 года.

Статический метод Promise.allSettled() принимает в качестве входных данных итерируемый объект промисов и возвращает единственный Promise. Этот возвращённый промис исполняется, когда все промисы во входном итерируемом объекте завершаются (включая случай, когда передаётся пустой итерируемый объект), с массивом объектов, описывающих результат каждого промиса.

Попробовать

const promise1 = Promise.resolve(3);
const promise2 = new Promise((resolve, reject) =>
  setTimeout(reject, 100, "foo"),
);
const promises = [promise1, promise2];

Promise.allSettled(promises).then((results) =>
  results.forEach((result) => console.log(result.status)),
);

// Expected output:
// "fulfilled"
// "rejected"

Синтаксис

Promise.allSettled(iterable)

Параметры

iterable
Итерируемый объект (например, Array) промисов. Эти значения ожидаются, поэтому другие thenable-объекты также разрешаются, а не-thenable-объекты возвращаются как есть.

Возвращаемое значение

Promise, который:

  • Уже исполнен, если переданный iterable пуст.
  • Асинхронно исполнен, когда все промисы в заданном iterable завершились (исполнились или отклонены). Значение исполнения — это массив объектов, каждый из которых описывает результат одного промиса в iterable, в порядке, в котором были переданы промисы, независимо от порядка их завершения. Каждый объект результата имеет следующие свойства:
    status
    Строка, либо "fulfilled", либо "rejected", указывающая на окончательное состояние промиса.
    value
    Присутствует только если status — это "fulfilled". Значение, которым был исполнен промис.
    reason
    Присутствует только если status — это "rejected". Причина, по которой промис был отклонён.

    Если переданный iterable не пуст, но не содержит ожидающих промисов, возвращённый промис всё равно исполняется асинхронно (вместо синхронного исполнения).

Описание

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

Для сравнения, промис, возвращаемый Promise.all(), может быть более подходящим, если задачи зависят друг от друга, или если вы хотите немедленно отклонить промис при отклонении любой из задач.

Примеры

Использование Promise.allSettled()

Promise.allSettled([
  Promise.resolve(33),
  new Promise((resolve) => setTimeout(() => resolve(66), 0)),
  99,
  Promise.reject(new Error("an error")),
]).then((values) => console.log(values));

// [
//   { status: 'fulfilled', value: 33 },
//   { status: 'fulfilled', value: 66 },
//   { status: 'fulfilled', value: 99 },
//   { status: 'rejected', reason: Error: an error }
// ]

Вы также можете деструктурировать результаты, чтобы иметь одну переменную на каждый завершённый результат.

const [status1, status2] = Promise.allSettled([
  Promise.resolve(33),
  new Promise((resolve) => setTimeout(() => resolve(66), 0)),
]);

// status1 = { status: 'fulfilled', value: 33 }
// status2 = { status: 'fulfilled', value: 66 }

Если вы деструктурируете результат, вы должны сохранять переменные результата в том же порядке, что и входные промисы; несоответствие может вызвать скрытые ошибки. Метод Promise.allSettledKeyed() избегает этой проблемы, связывая каждый вход и выход с ключом.

Спецификации

Спецификация
ECMAScript® 2027 Language Specification
# sec-promise.allsettled

Совместимость с браузерами

Десктоп Мобильные Сервер
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet WebView Android WebView on iOS Bun Deno Node.js
allSettled
76
79
71
63
13
76
79
54
13
12.0
76
13
1.0.0
1.0
12.9.0

Смотрите также

  • Полифил Promise.allSettled в core-js
  • Полифил es-shims Promise.allSettled
  • Руководство «Использование промисов»
  • Аккуратное асинхронное программирование с использованием промисов
  • Promise
  • Promise.all()
  • Promise.allSettledKeyed()
  • Promise.any()
  • Promise.race()

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API