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:

javascriptlet 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:

javascriptPromise.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:

javascriptPromise.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:

javascriptPromise.all(promises).then(function(res) {
  console.log(res);
}).catch(function(err) {
  console.log(err);
});
Задание 1

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.

Задание 2

Usando o array de promessas da tarefa anterior, faça com que o resultado da primeira promessa resolvida seja exibido no console.

Задание 3

Usando o array de promessas da tarefa anterior, faça com que a soma dos resultados de todas as promessas seja exibida no console.