Travailler avec des tableaux de promesses en JavaScript
Maintenant, nous allons analyser deux méthodes utiles,
permettant de travailler avec des tableaux de promesses.
La méthode Promise.all permet d'exécuter
du code après la fin de toutes les promesses, transmises
sous forme de tableau, et la méthode Promise.race
attend le chargement de la première promesse du tableau,
en rejetant les autres.
Les deux méthodes renvoient comme résultat une nouvelle
promesse. Pour la méthode Promise.all, le résultat
de cette promesse sera un tableau des résultats de toutes
les promesses transmises (l'ordre des résultats
correspond à l'ordre des promesses dans le tableau),
et pour Promise.race - le résultat de la première
promesse exécutée.
Voyons cela en pratique. Supposons que nous ayons un tableau de promesses :
let promises = [
new Promise(resolve => setTimeout(() => resolve(1), 1000)),
new Promise(resolve => setTimeout(() => resolve(2), 2000)),
new Promise(resolve => setTimeout(() => resolve(3), 3000)),
];
Utilisons Promise.all pour attendre
la fin du chargement de toutes les promesses de notre
tableau :
Promise.all(promises).then(function(res) {
console.log(res); // affichera [1, 2, 3] - les résultats de toutes les promesses
});
Et maintenant, utilisons Promise.race pour attendre
la fin du chargement de la première des promesses :
Promise.race(promises).then(function(res) {
console.log(res); // affichera 1 - le résultat de la première promesse exécutée
});
Si au moins une des promesses dans le tableau est
rejetée, alors la promesse avec le résultat passera
immédiatement à l'état rejected. Par conséquent,
l'exception survenue peut être attrapée de la manière
habituelle, que vous avez déjà étudiée, par exemple, via
catch :
Promise.all(promises).then(function(res) {
console.log(res);
}).catch(function(err) {
console.log(err);
});
Créez une fonction renvoyant une promesse, à l'intérieur
de laquelle est définie un délai aléatoire de
1 à 10 secondes. Que la promesse renvoie
ce délai comme résultat.
À l'aide d'une boucle et de votre fonction, remplissez
un tableau avec 10 promesses.
En utilisant le tableau de promesses de la tâche précédente, faites en sorte que le résultat de la première promesse exécutée s'affiche dans la console.
En utilisant le tableau de promesses de la tâche précédente, faites en sorte que la somme des résultats de toutes les promesses s'affiche dans la console.