Promise. any()
Renvoie le résultat de la première promesse résolue. Ne se rejette que si toutes échouent.
- Renvoie
- Une promesse résolue avec la valeur de la première promesse réussie, ou rejetée avec une erreur
AggregateError.
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 source = await Promise.any([
fail(100, 'Le serveur A est hors service'),
wait(300, 'Serveur B'),
wait(200, 'Serveur C')
])
console.log(`Données de : ${source}`)Définition et utilisation
#La méthode Promise.any() attend le premier succès. Les erreurs des promesses individuelles sont ignorées tant qu’il en reste au moins une susceptible de se résoudre. C’est ce qui la distingue de Promise.race(), où une première erreur peut aussi gagner.
Si toutes les promesses sont rejetées, Promise.any() se rejette avec une erreur AggregateError. Elle possède un champ errors contenant un tableau de toutes les raisons de rejet, dans l’ordre des promesses passées.
Un usage typique consiste à récupérer la même ressource depuis plusieurs sources, par exemple des serveurs de secours, et à utiliser celle qui répond correctement en premier.
Syntaxe
#Promise.any(iterable)Paramètres
#iterable
tableau de promesses
Les promesses parmi lesquelles seul le premier succès compte.
Plus d’exemples
#try {
await Promise.any([
Promise.reject(new Error('Pas de réseau')),
Promise.reject(new Error('Serveur en maintenance'))
])
} catch (error) {
console.log(error.name)
console.log(error.errors.map((e) => e.message))
}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 tasks = () => [fail(100, 'Erreur rapide'), wait(200, 'Succès plus lent')]
console.log(await Promise.any(tasks()))
try {
await Promise.race(tasks())
} catch (error) {
console.log(error.message)
}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
#- En gérant une erreur de
Promise.any(), regardez du côté deerror.errors. Vous y trouverez les causes de tous les échecs. - Quand seul le premier résultat compte, qu’il s’agisse d’un succès ou d’une erreur, utilisez
Promise.race().
Entrées associées
#- 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.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.allSettled()Attend que toutes les promesses soient réglées et renvoie une description de chaque résultat, succès comme erreurs.
- try...catchCapture les erreurs levées dans un bloc try et les traite dans catch. Un finally optionnel s’exécute toujours.
Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.