Passer au contenu principal

Comprendre et utiliser les promesses en JavaScript

Une promesse est un objet qui représente le résultat éventuel d'une opération asynchrone. Une promesse peut être dans l’un des trois états suivants :

  • En attente (Pending) : L’opération est en cours, mais n’est pas encore terminée.
  • Résolue (Fulfilled) : L’opération a réussi, et la promesse est maintenant associée à la valeur résultante.
  • Rejetée (Rejected) : L’opération a échoué, et la promesse est maintenant associée à la raison de cet échec.
let condition = true; // Changez cette valeur pour tester la promesse

// Création d'une promesse
let promesse = new Promise((resolve, reject) => {
    if (condition) {
        resolve("La promesse est résolue");
    } else {
        reject("La promesse est rejetée");
    }
});

promesse.then((message) => {
    console.log(message); // Affiche "La promesse est résolue" si la condition est vraie
}).catch((message) => {
    console.log(message); // Affiche "La promesse est rejetée" si la condition est fausse
});

Il existe plusieurs méthodes pour combiner des promesses, notamment :

Promise.all() : Cette méthode accepte un itérable de promesses et renvoie une nouvelle promesse qui se résout lorsque toutes les promesses dans l’itérable sont résolues. Elle exécute toutes les promesses en parallèle. Si l’une des promesses dans l’itérable est rejetée, alors la promesse renvoyée par Promise.all() est également rejetée, avec la raison du rejet de cette promesse.

let promesse1 = Promise.resolve(3);
let promesse2 = new Promise((resolve, reject) => {
  setTimeout(resolve, 10000, "foo");
});
let promesse3 = 42;

Promise.all([promesse1, promesse2, promesse3]).then((valeurs) => {
  console.log(valeurs); // Affiche "[3, "foo", 42]"
});

Promise.any() : Cette méthode est particulièrement utile lorsque vous avez plusieurs promesses et que la résolution de l’une d’entre elles suffit. Elle renvoie une promesse qui se résout dès que l’une des promesses dans l’itérable se résout, avec la valeur de cette promesse.

let promesse1 = Promise.reject(0);
let promesse2 = new Promise((resolve) => setTimeout(resolve, 100, 'quick'));
let promesse3 = new Promise((resolve) => setTimeout(resolve, 500, 'slow'));
let promises = [promesse1, promesse2, promesse3];

Promise.any(promises).then((value) => console.log(value)); // Affiche "quick"