DanLevy.net

Introduction aux Promesses

Les promesses JavaScript, c'est amusant !

Hero image for Introduction aux Promesses

Promises… Quel est leur intérêt ?

Quand vous exécutez du code, deux résultats sont possibles : succès ou échec.

Si ce code est asynchrone, il peut être plus difficile de dépendre de ce résultat de manière fiable.

Promises offrent un moyen pratique de gérer cela.

+--Promise---+
| |
| <-either-> |
| |
<-------+ +-------->
|Failure? Success?|
| |
v v
(Rejected) (Resolved)

Note : Bien que les Promises soient censées se résoudre ou être rejetées, il peut arriver qu’elles ne fassent ni l’un ni l’autre. Cela fait planter les applications et peut être très difficile à déboguer.

D’où viennent les Promises ?

Souvent, vous n’aurez pas besoin de créer une Promise vous-même. Des API natives comme fetch et des bibliothèques populaires comme axios retournent déjà des Promises.

Cependant, si vous devez créer une Promise, il y a deux façons de le faire :

Créer des Promises #1/2 :

La façon la plus simple de créer une Promise est d’utiliser la méthode utilitaire Promise.resolve().

Vous pouvez envelopper (ou « convertir ») n’importe quelle valeur en une Promise en utilisant Promise.resolve(valeur).

// Sans Promises :
function add10(num) {
return num + 10
}
// Avec Promises :
function add10Promised(num) {
return Promise.resolve(num + 10)
}
console.log(add10(10)) //=> 20
add10Promised(10)
.then(x => console.log(x)) //=> 20

Créer des Promises #2/2 :

Une autre méthode plus flexible : utiliser le constructeur Promise.

new Promise(callback) accepte une fonction callback avec l’interface suivante :

new Promise(function(resolve, reject) {
// Les arguments `resolve` et `reject` sont tous deux des fonctions.
// typeof resolve === 'function'
// typeof reject === 'function'
// `resolve(result)` doit être exécuté lorsque la promesse est tenue
// `reject(Error)` doit être exécuté si la promesse est rejetée
})

API des Promises

L’API des Promises est en fait un petit nombre de méthodes.

2 fonctions d’instance, et 4 fonctions statiques/utilitaires.

Méthodes d’instance de Promise

Accéder aux valeurs d’une promesse ne fonctionnera pas avec les astuces habituelles (par exemple console.log(promise)).

Toutes les promesses renvoient soit un succès (via .then(fn)) soit un échec (via .catch(fn)).

Méthodes utilitaires de Promise