Promise : méthode statique allSettled()
Baseline
Large disponibilité
Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis juillet 2020.
La méthode statique Promise.allSettled() prend un itérable de promesses en entrée et retourne une seule promesse (Promise). Cette promesse retournée est complétée (fulfilled en anglais) lorsque toutes les promesses de l'entrée sont acquittées (settle en anglais) (y compris lorsqu'un itérable vide est passé), avec un tableau d'objets qui décrivent le résultat de chaque promesse.
Exemple interactif
const promise1 = Promise.resolve(3);
const promise2 = new Promise((resolve, reject) =>
setTimeout(reject, 100, "toto"),
);
const promises = [promise1, promise2];
Promise.allSettled(promises).then((results) =>
results.forEach((result) => console.log(result.status)),
);
// Résultat attendu :
// "fulfilled"
// "rejected"
Syntaxe
Promise.allSettled(iterable)
Paramètres
iterable-
Un itérable (tel qu'un tableau (
Array)) contenant des promesses. Ces valeurs sont attendues, donc d'autres semi-promesses sont également résolues, tandis que les valeurs qui ne sont pas des semi-promesses sont retournées tels quels.
Valeur de retour
Une promesse (Promise) qui est :
-
Déjà complétée, si l'itérable passé est vide.
-
Complétée de façon asynchrone, lorsque toutes les promesses de l'itérable donné sont acquittées (soit complétées, soit rompues). La valeur de complétion est un tableau d'objets, chacun décrivant le résultat d'une promesse de l'itérable, dans l'ordre des promesses passées, indépendamment de l'ordre de complétion. Chaque objet de résultat possède les propriétés suivantes :
status-
Une chaîne de caractères, soit
"fulfilled", soit"rejected", indiquant l'état final de la promesse. value-
Présente uniquement si
statusvaut"fulfilled". La valeur avec laquelle la promesse a été complétée. reason-
Présente uniquement si
statusvaut"rejected". La raison pour laquelle la promesse a été rompue.
Si un
iterablepassé n'est pas vide mais ne contient aucune promesse en attente, la promesse retournée est toujours complétée de façon asynchrone (au lieu de synchrone).
Description
La méthode Promise.allSettled() est l'une des méthodes de concurrence des promesses. Promise.allSettled() est généralement utilisée lorsque vous avez plusieurs tâches asynchrones qui ne dépendent pas les unes des autres pour s'exécuter correctement, ou si vous souhaitez toujours connaître le résultat de chaque promesse.
En comparaison, la promesse retournée par Promise.all() peut être plus appropriée si les tâches dépendent les unes des autres, ou si vous souhaitez rompre immédiatement dès qu'une d'entre elles est rompue.
Exemples
>Utiliser Promise.allSettled()
Promise.allSettled([
Promise.resolve(33),
new Promise((resolve) => setTimeout(() => resolve(66), 0)),
99,
Promise.reject(new Error("une erreur")),
]).then((values) => console.log(values));
// [
// { status: 'fulfilled', value: 33 },
// { status: 'fulfilled', value: 66 },
// { status: 'fulfilled', value: 99 },
// { status: 'rejected', reason: Error: une erreur }
// ]
Vous pouvez également déstructurer les résultats pour avoir une variable par résultat de règlement.
const [statut1, statut2] = Promise.allSettled([
Promise.resolve(33),
new Promise((resolve) => setTimeout(() => resolve(66), 0)),
]);
// statut1 = { status: 'fulfilled', value: 33 }
// statut2 = { status: 'fulfilled', value: 66 }
Si vous déstructurez le résultat, vous devez conserver les variables de résultat dans le même ordre que les promesses d'entrée ; un décalage peut provoquer des bogues subtils. La méthode Promise.allSettledKeyed() évite ce problème en associant chaque entrée et sortie à une clé.
Spécifications
| Spécification |
|---|
| ECMAScript® 2027 Language Specification> # sec-promise.allsettled> |
Compatibilité des navigateurs
Voir aussi
- La prothèse d'émulation de
Promise.allSettleddanscore-js(angl.) - La prothèse d'émulation es-shims de
Promise.allSettled(angl.) - Le guide d'utilisation des promesses
- Programmation asynchrone à l'aide des promesses
- L'objet natif
Promise - La méthode statique
Promise.all() - La méthode statique
Promise.allSettledKeyed() - La méthode statique
Promise.any() - La méthode statique
Promise.race()