All, Any, AllSettled
Pour simplifier le code, le constructeur Promise dispose de différentes méthodes qui permettent de lancer plusieurs méthodes en parallèle ou en séries.
Méthode : All
La méthode all permet de lancer plusieurs promesses en parallèle.
La réponse est retournée lorsque toutes les promesses sont résolues.
La réponse est un tableau des réponses résolues de chaque promesse dans leur ordre d'écriture.
En cas d'échec d'une des promesses, seule la raison de l'échec est retournée.
const delay = (duration) =>
new Promise((resolve, reject) => {
setTimeout(() => resolve(`${duration} seconde(s)`), duration * 1000);
});
Promise.all([delay(4), delay(2), delay(3)])
.then((response) => console.log(response));
console.log("Exemple de Promesse");
Méthode : Any
La méthode any permet de lancer plusieurs promesses en parallèle.
Seule la réponse résolue de la plus rapide est retournée. Elle ne tient pas compte des échecs.
const delay = (duration) =>
new Promise((resolve, reject) => {
setTimeout(() => resolve(`${duration} seconde(s)`), duration * 1000);
});
Promise.any([delay(4), delay(2), delay(3)])
.then((response) => console.log(response));
console.log("Exemple de Promesse");
Méthode : Race
La méthode race permet de lancer plusieurs promesses en parallèle.
Seule la réponse résolue ou d'échec de la plus rapide est retournée.
const delay = (duration) =>
new Promise((resolve, reject) => {
if(duration > 10) reject('erreur');
setTimeout(() => resolve(`${duration} seconde(s)`), duration * 1000);
});
Promise.race([delay(4), delay(2), delay(11)])
.then((response) => console.log(response))
.catch((e) => console.error(e));
console.log("Exemple de Promesse");
Méthode : AllSettled
La méthode allSettled permet de lancer plusieurs promesses en parallèle.
La réponse est retournée lorsque toutes les promesses sont résolues ou rejetées.
La réponse est un tableau d'objets contenant le statut et la valeur ou la raison de chaque promesse.
Dans le cas d'un resolve : status = "fulfilled" value = response de la promesse
Dans le cas d'un reject : status = "rejected" reason = erreur du reject
const delay = (duration) =>
new Promise((resolve, reject) => {
if(duration > 10) reject(`erreur ${duration} trop grand`);
setTimeout(() => resolve(`${duration} seconde(s)`), duration * 1000);
});
Promise.allSettled ([delay(4), delay(11), delay(3)])
.then((response) => console.log(response))
.catch((e) => console.error(e));
console.log("Exemple de Promesse");
(3) [{...}, {...}, {...}]
0: {status: "fulfilled", value: "4 seconde(s)"}
1: {status: "rejected", reason: "erreur 11 trop grand"}
2: {status: "fulfilled", value: "3 seconde(s)"}