Introduction
Promise est un constructeur JavaScript qui permet de générer des promesses
const promesse = new Promise((resolve, reject) => {
});
Promise contient un paramètre qui est une fonction. Cette fonction contient deux paramètres resolve et reject qui sont eux-mêmes des fonctions.
Le rôle de la fonction principale est d'appeler un de ses deux paramètres, soit :
resolve : pour indiquer que tout c'est bien passé.
reject : pour indiquer qu'il y a eu une erreur.
const etat = "ok";
const promesse = new Promise((resolve, reject) => {
if (etat === "ok") {
console.log("Je passe le if");
resolve("Tout a bien fonctionné. Je retourne une réponse");
} else {
console.log("je suis dans le else");
reject("Un problème a eu lieu. Je retourne une erreur");
}
});
Au moment où resolve ou reject est exécutée, la promesse retourne une réponse qui est elle même une promesse.
Cette promesse contient le contenu des fonctions resolve ou reject.
L’intérêt de la promesse, c'est que l'on va pouvoir chaîner les promesses avec la méthode then et, ou la méthode catch.
const etat = "ok";
const promesse = new Promise((resolve, reject) => {
if (etat === "ok") {
console.log("Je passe le if");
resolve("Tout a bien fonctionné. Je retourne une réponse");
} else {
console.log("je suis dans le else");
reject("Un problème a eu lieu. Je retourne une erreur");
}
});
promesse
.then((response) => console.log(response))
.catch((e) => console.error(e));
Si la promesse principale exécute resolve, c'est le contenu de la méthode then qui est réalisé. Le paramètre response contient le contenu envoyé par la fonction resolve.
Si la promesse principale exécute reject, c'est le contenu de la méthode catch qui est réalisé. Le paramètre e contient le contenu envoyé par la fonction reject.
Vous pouvez tester le code dans la console de votre navigateur. Le contenu de resolve s'affiche.
Modifiez la valeur de etat pour visualiser l'appel de reject.
const etat = "pas ok";
const promesse = new Promise((resolve, reject) => {
if (etat === "ok") {
console.log("Je passe le if");
resolve("Tout a bien fonctionné. Je retourne une réponse");
} else {
console.log("je suis dans le else");
reject("Un problème a eu lieu. Je retourne une erreur");
}
});
promesse
.then((response) => console.log(response))
.catch((e) => console.error(e));
console.log("eeee");
Pour l'instant notre promesse semble fonctionner de façon synchrone. Dans la suite, nous ajouterons un temps de latence dans l'algorithme ne notre fonction principale.
Nous verrons que le code des méthodes de chaînage peut être interprété en asynchrone.