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.
- Renvoie
- Une promesse avec le résultat ou l’erreur de la première promesse réglée.
Exemple
#const wait = (ms, value) => new Promise((resolve) => setTimeout(() => resolve(value), ms))
const winner = await Promise.race([wait(300, 'Lucas'), wait(100, 'Léa'), wait(200, 'Emma')])
console.log(`Première réponse : ${winner}`)Définition et utilisation
#La méthode Promise.race() organise une course entre des promesses. La promesse renvoyée prend le résultat de celle qui se règle en premier, que ce soit un succès ou une erreur. Les autres promesses continuent de s’exécuter, mais leurs résultats sont ignorés.
L’usage le plus courant est un délai d’expiration. Vous faites courir l’opération réelle contre une promesse qui se rejette au bout de quelques secondes. Si l’opération n’a pas fini à temps, vous obtenez une erreur de délai dépassé au lieu d’attendre indéfiniment.
Un tableau vide donne une promesse qui ne se règle jamais. Si seul le premier succès vous intéresse et que les erreurs doivent être ignorées, utilisez Promise.any().
Syntaxe
#Promise.race(iterable)Paramètres
#iterable
tableau de promesses
Les promesses qui participent à la course.
Plus d’exemples
#const wait = (ms, value) => new Promise((resolve) => setTimeout(() => resolve(value), ms))
const timeout = (ms) =>
new Promise((_, reject) => setTimeout(() => reject(new Error('Délai dépassé')), ms))
try {
const data = await Promise.race([wait(800, 'données du serveur'), timeout(300)])
console.log(data)
} catch (error) {
console.log(error.message)
}Compatibilité des navigateurs
#Largement disponible
Fonctionne dans tous les navigateurs modernes, y compris sur mobile. Vous pouvez l’utiliser sans crainte.
- Chrome
- Edge
- Firefox
- Safari
Bonnes pratiques
#- Pour un délai d’expiration sur les requêtes
fetch(), il est plus pratique d’utiliser l’optionsignal: AbortSignal.timeout(ms), qui interrompt en plus la requête elle-même. - N’oubliez pas que les promesses perdantes ne sont pas annulées. Leurs opérations, par exemple des requêtes vers un serveur, continuent de s’exécuter.
Entrées associées
#- Promise.any()Renvoie le résultat de la première promesse résolue. Ne se rejette que si toutes échouent.
- 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.
- setTimeout()Exécute une fonction une seule fois, après le nombre de millisecondes indiqué.
- fetch()Envoie une requête HTTP et renvoie une promesse avec la réponse du serveur (un objet Response).
Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.