Promise. prototype. finally()
Enregistre une fonction appelée une fois la promesse réglée, qu’elle se termine par un succès ou par une erreur.
- Renvoie
- Une nouvelle promesse avec le même résultat ou la même erreur que l’originale.
Exemple
#const wait = (ms, value) => new Promise((resolve) => setTimeout(() => resolve(value), ms))
let loading = true
console.log('Chargement :', loading)
wait(300, ['Leçon 1', 'Leçon 2'])
.then((lessons) => console.log('Leçons :', lessons))
.catch((error) => console.log('Erreur :', error.message))
.finally(() => {
loading = false
console.log('Chargement :', loading)
})Définition et utilisation
#La méthode finally() prend une fonction sans argument, qui s’exécute toujours une fois que la promesse cesse d’être en attente : après une résolution comme après un rejet. C’est un bon endroit pour le nettoyage, par exemple masquer un indicateur de chargement ou réactiver un bouton.
La fonction de finally() ne reçoit ni le résultat ni l’erreur, et ne change pas la valeur de la chaîne. Le résultat ou l’erreur la traverse sans changement, donc les then() et catch() suivants se comportent comme si elle n’existait pas.
Il y a une exception : si la fonction de finally() lève une erreur ou renvoie une promesse rejetée, cette nouvelle erreur remplace le résultat d’origine.
Syntaxe
#promise.finally(onFinally)Paramètres
#onFinally
function ()
Fonction appelée après la résolution ou le rejet de la promesse. Elle ne reçoit aucun argument.
Plus d’exemples
#const value = await Promise.resolve(42).finally(() => 'cette valeur est ignorée')
console.log(value)
try {
await Promise.reject(new Error('Le serveur ne répond pas')).finally(() => {
console.log('Nettoyage après l’erreur')
})
} 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
#- Utilisez
finally()pour le nettoyage qui doit toujours s’exécuter : désactiver un indicateur de chargement, fermer une connexion, réactiver un formulaire. - Ne renvoyez pas depuis
finally()une valeur sur laquelle vous comptez. Elle sera ignorée. - Dans du code avec
await, l’équivalent est le blocfinallyd’une constructiontry...catch...finally.
Entrées associées
#- Promise.prototype.then()Enregistre une fonction appelée quand la promesse est résolue, et renvoie une nouvelle promesse, ce qui permet d’enchaîner les étapes.
- Promise.prototype.catch()Enregistre une fonction de gestion d’erreur, appelée quand la promesse est rejetée.
- try...catchCapture les erreurs levées dans un bloc try et les traite dans catch. Un finally optionnel s’exécute toujours.
- PromiseUn objet qui représente le résultat d’une opération disponible plus tard : une valeur en cas de succès, ou une erreur.
Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.