Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

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

js
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 status vaut "fulfilled". La valeur avec laquelle la promesse a été complétée.

    reason

    Présente uniquement si status vaut "rejected". La raison pour laquelle la promesse a été rompue.

    Si un iterable passé 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()

js
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.

js
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