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() избегает этой проблемы, связывая каждый вход и выход с ключом.
Спецификации
Совместимость с браузерами
| Десктоп | Мобильные | Сервер | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 - Руководство «Использование промисов»
- Аккуратное асинхронное программирование с использованием промисов
PromisePromise.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