Trabalhando com arrays de promessas em JavaScript
Agora vamos analisar dois métodos úteis
que permitem trabalhar com arrays de promessas.
O método Promise.all permite executar
o código após a conclusão de todas as promessas passadas
a ele na forma de um array, e o método Promise.race
aguarda o carregamento da primeira promessa do array,
descartando as demais.
Ambos os métodos retornam uma nova promessa
como resultado. Para o método Promise.all, o resultado
dessa promessa será um array com os resultados de todas
as promessas passadas (a ordem dos resultados
corresponde à ordem das promessas no array),
e para Promise.race - o resultado da primeira
promessa que for resolvida.
Vamos ver na prática. Suponha que temos um array de promessas:
let promises = [
new Promise(resolve => setTimeout(() => resolve(1), 1000)),
new Promise(resolve => setTimeout(() => resolve(2), 2000)),
new Promise(resolve => setTimeout(() => resolve(3), 3000)),
];
Vamos usar Promise.all para aguardar
a conclusão do carregamento de todas as promessas do nosso
array:
Promise.all(promises).then(function(res) {
console.log(res); // exibirá [1, 2, 3] - os resultados de todas as promessas
});
Agora, vamos usar Promise.race para aguardar
a conclusão do carregamento da primeira das promessas:
Promise.race(promises).then(function(res) {
console.log(res); // exibirá 1 - o resultado da primeira promessa resolvida
});
Se pelo menos uma das promessas no array for
rejeitada, a promessa com o resultado
passará imediatamente para o estado rejected. Portanto,
a exceção gerada pode ser capturada da maneira usual,
que você já aprendeu, por exemplo, usando
catch:
Promise.all(promises).then(function(res) {
console.log(res);
}).catch(function(err) {
console.log(err);
});
Crie uma função que retorna uma promessa, dentro
da qual é definido um atraso aleatório de
1 a 10 segundos. Que a promessa
retorne esse atraso como seu resultado.
Usando um loop e sua função, preencha
um array com 10 promessas.
Usando o array de promessas da tarefa anterior, faça com que o resultado da primeira promessa resolvida seja exibido no console.
Usando o array de promessas da tarefa anterior, faça com que a soma dos resultados de todas as promessas seja exibida no console.