DEV Community

jefferson-anderson
jefferson-anderson

Posted on

Como exibir o progresso das promessas em JavaScript

Conteúdo

  1. Visão geral
  2. Implementação
  3. Conclusão

Visão geral
Exibir o progresso de várias tarefas conforme elas são concluídas pode ser útil para o usuário, pois indica quanto tempo ele pode precisar esperar para que as tarefas restantes sejam concluídas.

Implementação
Vamos começar com a marcação!
Tudo o que você precisa é de uma tag script para apontar para um arquivo JavaScript (que será implementado abaixo) e um elemento div, cujo texto será manipulado para atualizar o contador de andamento das tarefas concluídas.

<!DOCTYPE html>







Em seguida, o JavaScript!

Começaremos criando uma função que resolve uma promessa após um tempo aleatório.

Fazemos isso porque se assemelha a como funcionará em um aplicativo do mundo real, por exemplo, solicitações HTTP resolvidas em momentos diferentes.

async function task() {
return new Promise(res => {
setTimeout(res, Math.random() * 5000);
})
}

Em segundo lugar, criaremos um array de 100 promessas e atualizaremos o texto de progresso para informar ao usuário quando todas as tarefas forem concluídas.

const loadingBar = document.getElementById('loadingBar');

(async() => {
const promises = new Array(100)
.fill(0)
.map(task);

loadingBar.textContent = Loading...;
await Promise.all(promises);
loadingBar.textContent = Loading Finished;
})();

Agora imagine se isso levar 30 segundos para ser concluído. Tudo o que o usuário verá na tela é o texto 'Carregando...' enquanto estiver em andamento.

Essa não é uma mensagem muito útil!

Vamos melhorar isso agora, atualizando o texto de progresso após a resolução de cada tarefa.

O trecho de código abaixo é a implementação completa.

const loadingBar = document.getElementById('loadingBar');

async function task() {
return new Promise(res => {
setTimeout(res, Math.random() * 5000);
})
}

function loadingBarStatus(current, max) {
loadingBar.textContent = Loading ${current} of ${max};
}

(async() => {
let current = 1;
const promises = new Array(100)
.fill(0)
.map(() => task().then(() => loadingBarStatus(current++, 100)));

await Promise.all(promises);
loadingBar.textContent = Loading Finished;
})();

Agora, você pode ver que conforme cada promessa é resolvida, o contador é incrementado e exibido para o usuário.

Conclusão
Resumindo, tudo o que você precisa fazer é atualizar o progresso à medida que cada promessa é resolvida.

Espero que você tenha achado este breve tutorial útil.

Deixe-me saber seus pensamentos nos comentários abaixo.

Top comments (0)