0Pricing
JavaScript Academy · Aula

Padrões de novas tentativas e espera progressiva

Tente novamente operações assíncronas que falharem algumas vezes, com intervalos; adicione espera progressiva exponencial e uma pequena variação aleatória; pare após um máximo definido

Padrões de novas tentativas e espera progressiva é 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.

Por que fazer novas tentativas?

Objetivo: Adicionar novas tentativas pequenas e controladas.

  • Laço simples de novas tentativas
  • Espera progressiva exponencial
  • Pequena variação aleatória
  • Máximo claro de tentativas
Padrões de novas tentativas e espera progressiva — ilustração 1

Auxiliar de atraso

Você precisa de um pequeno auxiliar de atraso para pausar entre as tentativas.

// delay: resolve after ms
function delay(ms) {
  return new Promise(function (resolve) {
    setTimeout(function () { resolve(); }, ms);
  });
}

async function demoDelay() {
  console.log("wait...");
  await delay(5);
  console.log("done");
}

demoDelay();
Padrões de novas tentativas e espera progressiva — ilustração 2

Simular um trabalho instável

Esta tarefa simulada permite praticar novas tentativas sem fazer chamadas de rede reais.

// Unstable task: fails first N times, then succeeds
function makeUnstable(failCount, value) {
  let left = failCount;
  return async function run() {
    if (left > 0) {
      left = left - 1;
      throw new Error("temporary");
    }
    return value;
  };
}

const sometimes = makeUnstable(2, "OK");
sometimes().catch(function (e) { console.log("first:", e.message); });
Padrões de novas tentativas e espera progressiva — ilustração 3

Laço de novas tentativas fixo

Intervalo fixo: aguarde o mesmo tempo entre as tentativas e pare depois do número máximo de tentativas.

// Retry a few times with a fixed wait
async function retryFixed(fn, tries, waitMs) {
  let lastError = null;
  for (let i = 1; i <= tries; i++) {
    try {
      return await fn();
    } catch (e) {
      lastError = e;
      console.log("attempt", i, "failed:", e.message);
      if (i < tries) {
        await delay(waitMs);
      }
    }
  }
  throw lastError;
}

(async function () {
  const job = makeUnstable(2, "OK");
  const result = await retryFixed(job, 3, 5);
  console.log("fixed result:", result);
})();
Padrões de novas tentativas e espera progressiva — ilustração 4

Espera progressiva exponencial

Espera progressiva: aumente a espera a cada tentativa e adicione uma pequena variação aleatória para evitar picos.

// Exponential backoff with a tiny jitter
function jitter(ms) {
  const wiggle = Math.floor(Math.random() * 3); // 0..2
  return ms + wiggle;
}

async function retryBackoff(fn, tries, baseMs) {
  let lastError = null;
  for (let i = 1; i <= tries; i++) {
    try {
      return await fn();
    } catch (e) {
      lastError = e;
      console.log("attempt", i, "failed:", e.message);
      if (i < tries) {
        const wait = jitter(baseMs * Math.pow(2, i - 1));
        await delay(wait);
      }
    }
  }
  throw lastError;
}

(async function () {
  const job = makeUnstable(2, "OK");
  const value = await retryBackoff(job, 4, 3);
  console.log("backoff result:", value);
})();
Padrões de novas tentativas e espera progressiva — ilustração 5

Dicas para novas tentativas

Dicas:

  • Faça novas tentativas apenas para erros temporários (tempos limite, limites de taxa).
  • Não faça novas tentativas para entradas inválidas.
  • Mantenha poucas tentativas (3–5) e registre as falhas brevemente.
Padrões de novas tentativas e espera progressiva — ilustração 6

Questionário sobre novas tentativas e espera progressiva

Verificação rápida: Noções básicas de espera progressiva.

Padrões de novas tentativas e espera progressiva — ilustração 7

Recapitulação

Recapitulação: Você criou um laço fixo de novas tentativas, adicionou uma espera progressiva exponencial com uma pequena variação aleatória e definiu um número máximo de tentativas para manter os aplicativos responsivos.

Padrões de novas tentativas e espera progressiva — ilustração 8

Perguntas Frequentes

A aula “Padrões de novas tentativas e espera progressiva” é grátis?

Sim — o texto completo de “Padrões de novas tentativas e espera progressiva” é 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 “Padrões de novas tentativas e espera progressiva”?

Tente novamente operações assíncronas que falharem algumas vezes, com intervalos; adicione espera progressiva exponencial e uma pequena variação aleatória; pare após um máximo definido 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 “Padrões de novas tentativas e espera progressiva”?

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. Escrevendo funções assíncronas; try/catch; paralelo versus sequencial
  2. Limites de tempo e cancelamento com AbortController
  3. Padrões de novas tentativas e espera progressiva
← Voltar para JavaScript Academy