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 }.
Exemple
#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)
}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
#Promise.allSettled(iterable)Paramètres
#iterable
tableau de promesses
Les promesses (ou valeurs normales) dont vous voulez attendre le règlement.
Plus d’exemples
#const results = await Promise.allSettled([Promise.resolve(10), Promise.reject(new Error('Oups'))])
console.log(results)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)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 lestatusde 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
#- Promise.all() vs Promise.allSettled()Promise.all() est rejetée dès la première erreur et renvoie un tableau de résultats, tandis que Promise.allSettled() attend chaque promesse et n’est jamais rejetée.
- Promise.all()Attend que toutes les promesses soient résolues et renvoie un tableau de leurs résultats. Se rejette dès la première erreur.
- Promise.any()Renvoie le résultat de la première promesse résolue. Ne se rejette que si toutes échouent.
- Promise.race()Renvoie une promesse qui se règle de la même façon que la première promesse réglée de la liste : par un succès ou par une erreur.
- Promise.prototype.catch()Enregistre une fonction de gestion d’erreur, appelée quand la promesse est rejetée.
Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.