JavaScriptCode asynchrone

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.
Sur cette page

Exemple

#
JavaScript
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)
  })
Console
Chargement : true
Leçons : ['Leçon 1', 'Leçon 2']
Chargement : false

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

#
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

#
Le résultat et l’erreur traversent finally()
JavaScript
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)
}
Console
42
Nettoyage après l’erreur
Le serveur ne répond pas

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 bloc finally d’une construction try...catch...finally.

Entrées associées

#

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