JavaScriptCode asynchrone

Promise.allSettled()

Attend que toutes les promesses soient réglées et renvoie une description de chaque résultat, succès comme erreurs.

Renvoie
Une promesse qui se résout toujours avec un tableau d’objets { status, value } ou { status, reason }.
Sur cette page

Exemple

#
JavaScript
const wait = (ms, value) => new Promise((resolve) => setTimeout(() => resolve(value), ms))
const fail = (ms, message) =>
  new Promise((_, reject) => setTimeout(() => reject(new Error(message)), ms))

const results = await Promise.allSettled([
  wait(200, 'Classement chargé'),
  fail(100, 'Chat indisponible'),
  wait(300, 'Badges chargés')
])

for (const result of results) {
  if (result.status === 'fulfilled') console.log('OK :', result.value)
  else console.log('Erreur :', result.reason.message)
}
Console
OK : Classement chargé
Erreur : Chat indisponible
OK : Badges chargés

Définition et utilisation

#

La méthode Promise.allSettled() fonctionne un peu comme Promise.all(), mais elle ne se rejette jamais à cause d’une seule erreur. Elle attend que chaque promesse soit résolue ou rejetée, puis renvoie un tableau d’objets décrivant le résultat de chacune.

Chaque objet a un champ status. Pour un succès, c’est "fulfilled" avec un champ value, et pour une erreur, "rejected" avec un champ reason. L’ordre des résultats correspond à l’ordre des promesses passées.

C’est utile quand les opérations sont indépendantes les unes des autres et que vous voulez savoir lesquelles ont réussi : vous envoyez plusieurs notifications, vous enregistrez une progression à plusieurs endroits, ou vous chargez des widgets qui peuvent chacun échouer séparément.

Syntaxe

#
Syntaxe
Promise.allSettled(iterable)

Paramètres

#
  • iterable

    tableau de promesses

    Les promesses (ou valeurs normales) dont vous voulez attendre le règlement.

Plus d’exemples

#
Forme des résultats
JavaScript
const results = await Promise.allSettled([Promise.resolve(10), Promise.reject(new Error('Oups'))])
console.log(results)
Console
[{ status: 'fulfilled', value: 10 }, { status: 'rejected', reason: Error: Oups }]
Seulement les résultats réussis
JavaScript
const results = await Promise.allSettled([
  Promise.resolve('Léa'),
  Promise.reject(new Error('Aucune donnée')),
  Promise.resolve('Emma')
])

const names = results.filter((r) => r.status === 'fulfilled').map((r) => r.value)
console.log(names)
Console
['Léa', 'Emma']

Compatibilité des navigateurs

#

Largement disponible · depuis 2020

Fonctionne dans tous les navigateurs modernes, y compris sur mobile. Vous pouvez l’utiliser sans crainte.

  • Chrome
  • Edge
  • Firefox
  • Safari

Bonnes pratiques

#
  • Après allSettled(), vérifiez toujours le status de chaque résultat. La méthode elle-même ne signale pas qu’un problème est survenu.
  • Si la première erreur doit interrompre toute l’opération, Promise.all() est le meilleur choix.

Entrées associées

#

Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.