0Pricing
JavaScript Academy · Leçon

Délais d’expiration et annulation avec AbortController

Ajoutez des délais d’expiration au code asynchrone et annulez le travail avec AbortController ; transmettez les signaux aux tâches pour les arrêter rapidement

Délais d’expiration et annulation avec AbortController est une leçon JavaScript Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 3. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage JavaScript Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours JavaScript Academy comprend 3 leçons au total.

Pourquoi utiliser des délais d’expiration et abort ?

Objectif : arrêter les tâches longues en toute sécurité.

  • Ajouter un délai d’expiration simple
  • Utiliser AbortController
  • Relier le signal à votre tâche
  • Nettoyer les minuteries
Délais d’expiration et annulation avec AbortController — illustration 1

Tâche sensible au signal

Créez des tâches qui écoutent signal.abort et arrêtent la minuterie en cas d’annulation.

// 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);
});
Délais d’expiration et annulation avec AbortController — illustration 2

abort en action

Créez un controller, transmettez son signal et appelez abort() pour annuler.

// 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);
Délais d’expiration et annulation avec AbortController — illustration 3

Enveloppe avec délai d’expiration

Utilisez Promise.race pour rejeter l’opération si la tâche prend trop longtemps ; supprimez la minuterie dans finally.

// 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); });
Délais d’expiration et annulation avec AbortController — illustration 4

Délai d’expiration et abort ensemble

Si le délai d’expiration l’emporte, appelez abort() afin que le travail sous-jacent s’arrête rapidement.

// 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); });
Délais d’expiration et annulation avec AbortController — illustration 5

Conseils et liste de vérification

Conseils :

  • Supprimez toujours les minuteries dans finally.
  • Transmettez le signal aux tâches et vérifiez signal.aborted.
  • Préférez un controller par requête.
Délais d’expiration et annulation avec AbortController — illustration 6

Quiz sur les notions de base d’AbortController

Vérification rapide : modèle d’annulation.

Délais d’expiration et annulation avec AbortController — illustration 7

Récapitulatif

Récapitulatif : Vous avez créé une tâche qui tient compte d’un signal, l’avez annulée avec AbortController, ajouté un délai d’expiration grâce à Promise.race et combiné les deux pour quitter proprement dès que nécessaire.

Délais d’expiration et annulation avec AbortController — illustration 8

Questions Fréquemment Posées

La leçon « Délais d’expiration et annulation avec AbortController » est-elle gratuite ?

Oui — le texte complet de « Délais d’expiration et annulation avec AbortController » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours JavaScript Academy, passe à CoddyKit PRO. Le cours JavaScript Academy comprend 3 leçons au total.

Qu'est-ce que j'apprendrai dans « Délais d’expiration et annulation avec AbortController » ?

Ajoutez des délais d’expiration au code asynchrone et annulez le travail avec AbortController ; transmettez les signaux aux tâches pour les arrêter rapidement Tu pratiques JavaScript Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer JavaScript Academy ?

Aucune expérience préalable n'est requise. JavaScript Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 3.

Combien de temps prend la leçon « Délais d’expiration et annulation avec AbortController » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon JavaScript Academy ?

Oui. Chaque leçon JavaScript Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Écrire des fonctions async ; try/catch ; exécution parallèle ou séquentielle
  2. Délais d’expiration et annulation avec AbortController
  3. Modèles de nouvelle tentative et de temporisation progressive
← Retour à JavaScript Academy