Trabajo con arrays de promesas en JavaScript
Ahora analizaremos dos métodos útiles,
que permiten trabajar con arrays de promesas.
El método Promise.all permite ejecutar
el código al finalizar todas las promesas, pasadas
a él en forma de array, y el método Promise.race
espera a que se cargue la primera promesa del array,
descartando las demás.
Ambos métodos devuelven como resultado una nueva
promesa. Para el método Promise.all el resultado
de esta promesa será un array de resultados de todas
las promesas pasadas (el orden de los resultados
corresponde al orden de las promesas en el array),
y para Promise.race - el resultado de la primera
promesa que se complete.
Veamos en la práctica. Supongamos que tenemos un array de promesas:
let promises = [
new Promise(resolve => setTimeout(() => resolve(1), 1000)),
new Promise(resolve => setTimeout(() => resolve(2), 2000)),
new Promise(resolve => setTimeout(() => resolve(3), 3000)),
];
Usemos Promise.all para esperar
a que terminen de cargarse todas las promesas de nuestro
array:
Promise.all(promises).then(function(res) {
console.log(res); // mostrará [1, 2, 3] - resultados de todas las promesas
});
Y ahora usemos Promise.race para esperar
a que termine de cargarse la primera de las promesas:
Promise.race(promises).then(function(res) {
console.log(res); // mostrará 1 - resultado de la primera promesa que se completó
});
Si al menos una de las promesas en el array es
rechazada, la promesa con el resultado inmediatamente
pasará al estado rejected. Por lo tanto,
la excepción generada se puede capturar de la forma
usual, que ya han estudiado, por ejemplo, mediante
catch:
Promise.all(promises).then(function(res) {
console.log(res);
}).catch(function(err) {
console.log(err);
});
Cree una función que devuelva una promesa, dentro
de la cual se establezca un retraso aleatorio de
1 a 10 segundos. Que la promesa
devuelva como resultado este retraso.
Usando un ciclo y su función, llene un
array con 10 promesas.
Usando el array de promesas de la tarea anterior, haga que se muestre en la consola el resultado de la primera promesa que se complete.
Usando el array de promesas de la tarea anterior, haga que se muestre en la consola la suma de los resultados de todas las promesas.