Get to know MDN better
Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.
Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis juillet 2015.
La méthode then(), disponible sur les instances Promise, prend jusqu'à deux arguments qui sont les fonctions de rappel respectivement utilisées pour la réussite ou l'échec de la promesse. Cette méthode renvoie immédiatement un objet Promise équivalent, ce qui permet d'enchaîner les appels aux autres méthodes des promesses.
Une fonction à exécuter de façon asynchrone quand la promesse est tenue. La valeur de retour de cette fonction devient la valeur de réussite de la promesse renvoyée par then(). Cette fonction de rappel est appelée avec les arguments suivants :
valeurLa valeur avec laquelle la promesse a été tenue. Si cet argument n'est pas une fonction, il est remplacé en interne par la fonction identité ((x) => x) qui passe la valeur de réussite.
siRejetée FacultatifUne fonction à exécuter de façon asynchrone quand la promesse est rompue. Sa valeur de retour devient la valeur de réussite de la promesse renvoyée par catch(). Cette fonction de rappel est appelée avec les arguments suivants :
raisonLa valeur avec laquelle la promesse a été rompue. Si cet argument n'est pas une fonction, il est remplacé en interne par une fonction de rejet ((x) => { throw x; }) qui renvoie la raison d'échec qui a été reçue en amont.
Cette méthode renvoie immédiatement un nouvel objet Promise. Cette nouvelle promesse est toujours en attente de résolution lorsqu'elle est renvoyée, quel que soit le statut de la promesse courante.
Une des deux fonctions de rappel entre siTenue() et siRejetée() sera exécutée selon la réussite ou l'échec de la promesse. L'appel est toujours exécuté de façon asynchrone, même si la promesse courante est déjà résolue. Le comportement de la promesse renvoyée (désignée ici avec p) dépend du résultat de l'exécution de la fonction de rappel, selon les règles suivantes. Si la fonction de rappel :
La méthode then() permet de planifier l'exécution des fonctions de rappel pour gérer la résolution d'une promesse (que ce soit une réussite ou un échec). Il s'agit d'une méthode primitive pour les promesses : le protocole thenable attend de tous les objets semblables à une promesse qu'ils exposent une méthode then(), et les méthodes catch() et finally() fonctionnent toutes les deux en appelant la méthode then().
Pour plus d'informations à propos du gestionnaire d'échec siRejetée(), voir la référence pour la méthode catch().
then() renvoie un nouvel objet Promise. Si vous appelez la méthode then() par deux fois, sur le même objet Promise (plutôt que de les enchaîner), vous obtiendrez alors une promesse dotée de deux paires de gestionnaires de réussite/échec. Tous les gestionnaires attachés à une même promesse sont appelés dans l'ordre selon lequel ils ont été ajoutés. Toutefois, les deux promesses renvoyées par chaque appel then() engendre deux chaînes séparées qui n'attendent pas la résolution de l'autre.
Les objets dotés d'une méthode then() (thenable) créés le long d'une chaîne d'appels à then() sont toujours résolus. Le gestionnaire siTenue() ne reçoit jamais d'objet doté d'une méthode then() et toute valeur avec une méthode then() renvoyée par l'un des gestionnaires est résolue avant d'être passée au gestionnaire suivant. En effet, lors de la construction d'une promesse, les fonctions de résolution et de rejet passées sont enregistrées et lorsque la promesse courante est terminée, la fonction correspondante est appelée avec la valeur de réussite ou la raison de l'échec. La logique de résolution est déterminée par la fonction passée au constructeur Promise().
then() prend en charge les sous-classes, ce qui signifie qu'elle peut être appelée depuis les instances des sous-classes de Promise, le résultat sera alors une promesse du type de la sous-classe. Vous pouvez personnaliser le type de la valeur de retour grâce à la propriété @@species.
La méthode then() renvoie un nouvel objet Promise, ce qui permet d'enchaîner les appels aux méthodes des promesses.
Si la fonction passée à then() comme gestionnaire renvoie un objet Promise, une promesse équivalente sera exposée à l'appel à then() qui suit. Le fragment de code qui suit simule du code asynchrone à l'aide de la fonction setTimeout().
La valeur renvoyée par then() est résolue de la même façon qu'avec Promise.resolve(). Cela signifie que les objets avec une méthode then() sont pris en charge et que si la valeur de retour n'est pas une promesse, elle est implicitement convertie en un objet Promise puis résolue.
Un appel à then() renvoie une promesse qui pourra échouer si la fonction déclenche une erreur ou renvoie une promesse rompue.
En pratique, il est plutôt souhaitable d'intercepter les promesses rompues avec catch() plutôt que d'utiliser la syntaxe de then() avec les deux cas (réussite/échec). Voici un exemple.
Dans tous les autres cas, la promesse renvoyée finit par être tenue. Dans l'exemple qui suit, le premier appel à then() renvoie la valeur 42, enveloppée dans une promesse tenue, même si la promesse précédente dans la chaîne avait été rejetée.
Si siTenue() renvoie une promesse, la valeur de retour de then() sera tenue/rompue selon l'état de cette promesse.
On peut enchaîner les appels des fonctions qui renvoient des promesses.
Dans l'exemple qui suit, on illustre le caractère asynchrone de la méthode then().
| ECMAScript® 2027 Language Specification # sec-promise.prototype.then |
Activez JavaScript pour afficher ce tableau de compatibilité des navigateurs.
Cette page a été modifiée le 17 févr. 2025 par les contributeur·ice·s du MDN.
Votre modèle pour un internet meilleur.
Visitez la société mère à but non lucratif de Mozilla Corporation, la Fondation Mozilla.
Certaines parties de ce contenu sont protégées par le droit d'auteur ©1998—2026 des contributeurs individuels de mozilla.org. Contenu disponible sous une licence Creative Commons.