0Pricing
JavaScript Academy · Aula

Limites de tempo e cancelamento com AbortController

Adicione limites de tempo ao código assíncrono e cancele operações com AbortController; conecte sinais às tarefas para interrompê-las mais cedo

Limites de tempo e cancelamento com AbortController é uma aula grátis de JavaScript Academy no CoddyKit. Esta é a aula 2 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 usar tempos limite e cancelamentos?

Objetivo: Interrompa tarefas longas com segurança.

  • Adicione um tempo limite simples
  • Use AbortController
  • Conecte o sinal à sua tarefa
  • Limpe os temporizadores
Limites de tempo e cancelamento com AbortController — ilustração 1

Tarefa ciente do sinal

Crie tarefas que escutem signal.abort e parem o temporizador ao serem canceladas.

// Fake fetch that respects AbortSignal
function fakeFetch(ms, value, signal) {
  return new Promise(function (resolve, reject) {
    // Abort handler
    function onAbort() {
      clearTimeout(t);
      reject(new Error("aborted"));
    }

    // If already aborted
    if (signal && signal.aborted) {
      return reject(new Error("aborted"));
    }

    // Finish timer
    const t = setTimeout(function () {
      if (signal) {
        signal.removeEventListener("abort", onAbort);
      }
      resolve(value);
    }, ms);

    // Listen for abort
    if (signal) {
      signal.addEventListener("abort", onAbort);
    }
  });
}

fakeFetch(5, "OK").then(function (v) {
  console.log("fakeFetch:", v);
});
Limites de tempo e cancelamento com AbortController — ilustração 2

Cancelamento em ação

Crie um controlador, passe o seu sinal e chame abort() para cancelar.

// AbortController cancels signal-aware tasks
const controller = new AbortController();

fakeFetch(20, "Too slow", controller.signal)
  .then(function (v) {
    console.log("done:", v);
  })
  .catch(function (e) {
    console.log("catch:", e.message);
  });

// Abort after a short delay
setTimeout(function () {
  controller.abort();
  console.log("aborted");
}, 5);
Limites de tempo e cancelamento com AbortController — ilustração 3

Invólucro de tempo limite

Use Promise.race para rejeitar se a tarefa demorar demais; limpe o temporizador em finalmente.

// Add a timeout to any Promise with Promise.race
function withTimeout(promise, ms) {
  return Promise.race([
    promise,
    new Promise(function (_resolve, reject) {
      const t = setTimeout(function () {
        reject(new Error("timeout"));
      }, ms);
      // Small trick: clear timer when the main promise settles
      promise.finally(function () { clearTimeout(t); });
    })
  ]);
}

// Demo: this will time out
withTimeout(fakeFetch(30, "late"), 10)
  .then(function (v) { console.log("value:", v); })
  .catch(function (e) { console.log("timeout:", e.message); });
Limites de tempo e cancelamento com AbortController — ilustração 4

Tempo limite + cancelamento juntos

Se o tempo limite vencer, chame abort() para que o trabalho subjacente pare antecipadamente.

// Combine: abort if timeout fires
async function fetchWithTimeout(msWork, msTimeout) {
  const c = new AbortController();

  const task = fakeFetch(msWork, "data", c.signal);

  // If timeout wins, abort the task
  try {
    const result = await withTimeout(task, msTimeout);
    return result;
  } catch (e) {
    c.abort();
    throw e;
  }
}

fetchWithTimeout(25, 10)
  .then(function (v) { console.log("got:", v); })
  .catch(function (e) { console.log("failed:", e.message); });
Limites de tempo e cancelamento com AbortController — ilustração 5

Dicas e lista de verificação

Dicas:

  • Sempre limpe os temporizadores em finalmente.
  • Passe o sinal para as tarefas e verifique signal.aborted.
  • Prefira um controlador por solicitação.
Limites de tempo e cancelamento com AbortController — ilustração 6

Questionário básico sobre AbortController

Verificação rápida: Padrão de cancelamento.

Limites de tempo e cancelamento com AbortController — ilustração 7

Recapitulação

Recapitulação: Você criou uma tarefa que reconhece sinais, cancelou-a com AbortController, adicionou um tempo limite por meio de Promise.race e combinou ambos para permitir saídas antecipadas seguras.

Limites de tempo e cancelamento com AbortController — ilustração 8

Perguntas Frequentes

A aula “Limites de tempo e cancelamento com AbortController” é grátis?

Sim — o texto completo de “Limites de tempo e cancelamento com AbortController” é 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 “Limites de tempo e cancelamento com AbortController”?

Adicione limites de tempo ao código assíncrono e cancele operações com AbortController; conecte sinais às tarefas para interrompê-las mais cedo 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 2 de 3.

Quanto tempo leva a aula “Limites de tempo e cancelamento com AbortController”?

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