Cette page a été traduite à partir de l'anglais par la communauté.Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.
Promise.prototype.finally()
Baseline Widely available
Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis octobre 2018.
La méthodefinally() renvoie un objetPromise et accepte en argument une fonction decallback qui est appelée lorsque la promesse a été résolue (qu'elle ait été tenue ou rejetée). Cela permet d'exécuter du code une fois que la promesse a été traitée, quel que soit le résultat. On évite ainsi de dupliquer du code entre les gestionnairesthen() etcatch().
Dans cet article
Syntaxe
p.finally(onFinally);p.finally(function () { // appelée dans tous les // cas de terminaison});Paramètres
Valeur de retour
Cette méthode renvoie un objetPromise.
Description
La méthodefinally peut être utile si on souhaite effectuer un traitement ou du nettoyage (fermetures de flux, libération de ressources, etc.) une fois qu'une promesse est résolue, quel que soit l'état de la résolution (tenue ou rejetée).
La méthodefinally est similaire à l'utilisation de la forme.then(onFinally, onFinally), on notera toutefois quelques différences :
- Lorsqu'on crée une fonction en ligne, on peut ne la passer qu'une seule fois et éviter d'avoir à déclarer une variable ou à la déclarer à deux reprises.
- Uncallback
finallyne recevra pas d'argument car on ne peut pas savoir si la promesse a été tenue ou rompue. Cette fonction est précisément appelée lorsqu'on ne s'intéresse pas à la raison du rejet ou à la réussite de la promesse. Une telle valeur est donc superflue. Ainsi :- À la différence de
Promise.resolve(2).then(() => {}, () => {})qui sera résolue avec la valeurundefined,Promise.resolve(2).finally(() => {})sera résolue avec la valeur2. - De même, à la différence de
Promise.reject(3).then(() => {}, () => {})qui sera résolue avec la valeurundefined,Promise.reject(3).finally(() => {})sera rejetée avec3.
- À la différence de
Note :Toutefois, on notera qu'utiliserthrow (ou que renvoyer une promesse rompue) dans lecallbackfinally rejettera la promesse avec l'exception indiquée dans l'appel àthrow.
Exemples
let isLoading = true;fetch(myRequest) .then(function (response) { var contentType = response.headers.get("content-type"); if (contentType && contentType.includes("application/json")) { return response.json(); } throw new TypeError("Oups, ceci n'est pas du JSON !"); }) .then(function (json) { /* traiter le JSON */ }) .catch(function (error) { console.log(error); /* La ligne précédent peut aussi déclencher une erreur (si console vaut {} par exemple) */ }) .finally(function () { isLoading = false; });Spécifications
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-promise.prototype.finally> |