“AbortController” pour annuler une requête “fetch”

“AbortController” pour annuler une requête “fetch”

Ce post fait partie de la catégorie #TIL. J'y décris mes découvertes quotidiennes sur le développement web.

Aujourd’hui, je suis tombé par hasard sur la documentation d’AbortController, qui permet d’annuler une requête fetch avant son la fin de son exécution. Cela peut être très utile dans le cas où l’on souhaite permettre à un utilisateur d’empêcher un téléchargement trop long d’arriver à son terme par exemple.

Pour le mettre en place, c’est assez simple :

// on instancie un nouveau AbortController
const controller = new AbortController();
const signal = controller.signal;

// au clic sur le bouton d'annulation, on utilise le 'controller' pour annuler la requête
abortBtn.addEventListener('click', () => {
  controller.abort();
});

// lors du 'fetch', on passe le 'signal' en paramètre
fetch(url, { signal })
  .then(response => { ... })
  .catch(e => { // si la requête est annulée, la promesse est rejetée
    console.error('Download error: ' + e.message);
  })

Voilà, c’est aussi simple que ça ! Si tu veux en savoir plus, ça se passe ici : https://developer.mozilla.org/en-US/docs/Web/API/AbortController

Une question, une remarque ?

N'hésite pas à m'envoyer un message, je te répondrai avec plaisir !