Aller au contenu principal

Introduction aux promesses (promise)

Qu'est-ce qu'une Promesse?

Imaginez une promesse comme une commande que vous passez dans un restaurant. Vous passez la commande (demande) et vous attendez que votre plat soit prêt (réponse). En JavaScript, une promesse est un objet qui représente l'achèvement ou l'échec d'une opération asynchrone.

Pourquoi les Promesses ?

Elles permettent de gérer des opérations qui prennent du temps (comme charger des données depuis internet) sans bloquer le reste du code. Elles aident à éviter des structures de code compliquées et difficiles à suivre, connues sous le nom de "callback hell" (l'enfer des rappels). Structure d'une Promesse Création d'une Promesse

let maPromesse = new Promise((resolve, reject) => {
// Code qui fait quelque chose, puis appelle resolve() si tout va bien,
// ou reject() en cas d'erreur.
});

Gestion des Réponses d'une Promesse

Traitement d'une Réussite => Utiliser .then()

maPromesse.then((resultat) => {
console.log(resultat); // Gérer la réussite
});

Traitement d'une Erreur => Utiliser .catch()

maPromesse.catch((erreur) => {
console.error(erreur); // Gérer l'erreur
});

Exemples et Utilisations Courantes

Promesses et Requêtes Réseau avec API Fetch

L'API Fetch utilise des promesses pour gérer les réponses des requêtes réseau.

fetch('https://exemple.com/donnees')
.then(reponse => reponse.json()) // Conversion JSON
.then(donnees => console.log(donnees))
.catch(erreur => console.error('Erreur :', erreur));

Enchaînement des Promesses

Vous pouvez chaîner plusieurs opérations asynchrones qui doivent s'exécuter l'une après l'autre. Chaque .then() peut renvoyer une nouvelle promesse, formant ainsi une chaîne.

Méthodes Avancées de Promesses

  • Promise.all() => Utilisée pour attendre que plusieurs promesses soient toutes résolues. Exemple : Exécuter plusieurs requêtes en parallèle.

  • Promise.race() => Résout ou rejette dès que la première promesse de l'ensemble est résolue ou rejetée.

  • Promise.allSettled() => Attend que toutes les promesses soient soit résolues, soit rejetées, et renvoie leur résultat.

  • Promise.any() => Résout dès que l'une des promesses est résolue. Ignore les rejets sauf si toutes les promesses sont rejetées.