0Pricing
JavaScript Academy · Aula

E3 — Pool/fila de Promises (concorrência assíncrona)

Execute muitas tarefas assíncronas com um pequeno limite de concorrência. Mantenha uma fila, inicie algumas por vez e reúna os resultados

E3 — Pool/fila de Promises (concorrência assíncrona) é uma aula grátis de JavaScript Academy no CoddyKit. Esta é a aula 3 de 3. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de JavaScript Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de JavaScript Academy inclui 3 aulas no total.

O que e por quê

Objetivo: Executar muitas tarefas assíncronas sem sobrecarregar o sistema.

  • Limitar a concorrência, por exemplo, 2 por vez
  • Manter um índice da fila simples
  • Armazenar os resultados em um vetor
  • Usar código adequado para iniciantes e pequenos auxiliares
E3 — Pool/fila de Promises (concorrência assíncrona) — ilustração 1

Auxiliar de tarefa assíncrona

Um pequeno auxiliar retorna uma Promise que é resolvida após um atraso; opcionalmente, pode falhar para fins de teste.

// Simulate async work with setTimeout
function fakeJob(name, ms, fail) {
  return new Promise(function (resolve, reject) {
    setTimeout(function () {
      if (fail) {
        reject(new Error("fail:" + name));
      } else {
        resolve("done:" + name);
      }
    }, ms);
  });
}

console.log("demo job:", typeof fakeJob === "function");
E3 — Pool/fila de Promises (concorrência assíncrona) — ilustração 2

Implementação do conjunto de tarefas

runPool inicia alguns workers; cada um obtém o próximo índice de tarefa e aguarda sua conclusão. Os resultados mantêm a ordem das entradas.

// Run tasks with a fixed concurrency limit
async function runPool(tasks, limit) {
  // tasks: array of functions () => Promise<any>
  const results = new Array(tasks.length);
  let next = 0;

  // worker runs tasks until none left
  async function worker() {
    while (true) {
      const i = next;
      if (i >= tasks.length) return;
      next = next + 1;

      try {
        const value = await tasks[i]();
        results[i] = { ok: true, value: value };
      } catch (e) {
        results[i] = { ok: false, error: String(e) };
      }
    }
  }

  // start up to limit workers
  const workers = [];
  for (let k = 0; k < limit; k = k + 1) {
    workers.push(worker());
  }

  await Promise.all(workers);
  return results;
}

console.log("pool ready:", typeof runPool === "function");
E3 — Pool/fila de Promises (concorrência assíncrona) — ilustração 3

Execute o conjunto de tarefas

Limite a 2 o número de tarefas em andamento. O vetor mantém a ordem: o índice i contém o resultado da tarefa i.

// Prepare simple tasks
const jobs = [
  function () { return fakeJob("A", 300, false); },
  function () { return fakeJob("B", 200, false); },
  function () { return fakeJob("C", 150, true ); },
  function () { return fakeJob("D", 100, false); }
];

// Run with concurrency = 2
(async function () {
  const out = await runPool(jobs, 2);
  console.log("results:", out);
})();
E3 — Pool/fila de Promises (concorrência assíncrona) — ilustração 4

Invólucro opcional de repetição

Envolva uma tarefa com um pequeno auxiliar withRetry. Mantenha os números pequenos e a lógica simples.

// Optional: add retry to a task wrapper (beginner-friendly)
function withRetry(task, attempts) {
  return async function () {
    let lastErr = null;
    for (let i = 0; i < attempts; i = i + 1) {
      try {
        return await task();
      } catch (e) {
        lastErr = e;
      }
    }
    throw lastErr;
  };
}

const jobsWithRetry = [
  withRetry(function () { return fakeJob("R1", 80, true); }, 2),
  withRetry(function () { return fakeJob("R2", 60, false); }, 2)
];

(async function () {
  const out = await runPool(jobsWithRetry, 1);
  console.log("retry results:", out);
})();
E3 — Pool/fila de Promises (concorrência assíncrona) — ilustração 5

Orientações para iniciantes

Dicas:

  • Armazene as tarefas como funções () => promessa.
  • Mantenha um índice seguinte compartilhado para a fila.
  • Use tentativa/captura para cada tarefa e armazene os resultados.
  • Escolha um limite pequeno (2–4) para iniciantes.
E3 — Pool/fila de Promises (concorrência assíncrona) — ilustração 6

Questionário básico sobre limite de concorrência

Verificação rápida: por que usar um conjunto?

E3 — Pool/fila de Promises (concorrência assíncrona) — ilustração 7

Recapitulação

Recapitulação: um pequeno conjunto de promessas executa tarefas com um limite fixo, mantém a ordem em um vetor de resultados e usa uma simples tentativa/captura para cada tarefa. Um ótimo padrão para iniciantes.

E3 — Pool/fila de Promises (concorrência assíncrona) — ilustração 8

Perguntas Frequentes

A aula “E3 — Pool/fila de Promises (concorrência assíncrona)” é grátis?

Sim — o texto completo de “E3 — Pool/fila de Promises (concorrência assíncrona)” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de JavaScript Academy, atualize para CoddyKit PRO. O curso de JavaScript Academy inclui 3 aulas no total.

O que vou aprender em “E3 — Pool/fila de Promises (concorrência assíncrona)”?

Execute muitas tarefas assíncronas com um pequeno limite de concorrência. Mantenha uma fila, inicie algumas por vez e reúna os resultados Você pratica JavaScript Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar JavaScript Academy?

Nenhuma experiência prévia é necessária. JavaScript Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 3.

Quanto tempo leva a aula “E3 — Pool/fila de Promises (concorrência assíncrona)”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de JavaScript Academy?

Sim. Cada aula de JavaScript Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. E1 — Avaliador de expressões (parte 1: + e - da esquerda para a direita)
  2. E2 — Analisador de registros (filtros e contadores simples)
  3. E3 — Pool/fila de Promises (concorrência assíncrona)
← Voltar para JavaScript Academy