Il existe une nouvelle API pour faire des requêtes à partir de JavaScript: fetch (). Existe-t-il un mécanisme intégré pour annuler ces demandes en vol?
javascript
ajax
fetch-api
Sam Lee
la source
la source
Réponses:
TL / DR:
fetch
prend désormais en charge unsignal
paramètre au 20 septembre 2017, mais tous les navigateurs ne semblent pas le prendre en charge pour le moment .MISE À JOUR 2020: La plupart des principaux navigateurs (Edge, Firefox, Chrome, Safari, Opera et quelques autres) prennent en charge la fonctionnalité , qui fait désormais partie du standard de vie DOM . (au 5 mars 2020)
C'est un changement que nous verrons très bientôt cependant, et vous devriez donc être en mesure d'annuler une demande en utilisant un
AbortController
sAbortSignal
.Version longue
Comment:
Voici comment cela fonctionne:
Etape 1 : Vous créez un
AbortController
(Pour l' instant , je viens d' utiliser ce )const controller = new AbortController()
Étape 2 : Vous obtenez le
AbortController
signal s comme ceci:const signal = controller.signal
Étape 3 : Vous passez le
signal
pour récupérer comme ceci:Étape 4 : abandonnez simplement chaque fois que vous devez:
controller.abort();
Voici un exemple de la façon dont cela fonctionnerait (fonctionne sur Firefox 57+):
Sources:
la source
AbortController is not defined
. Quoi qu'il en soit, ce n'est qu'une preuve de concept, au moins les gens avec Firefox 57+ peuvent le voir fonctionnerhttps://developers.google.com/web/updates/2017/09/abortable-fetch
https://dom.spec.whatwg.org/#aborting-ongoing-activities
fonctionne dans edge 16 (2017-10-17), firefox 57 (2017-11-14), desktop safari 11.1 (2018-03-29), ios safari 11.4 (2018-03-29), chrome 67 (2018-05 -29), et plus tard.
sur les navigateurs plus anciens, vous pouvez utiliser le polyfill whatwg-fetch de github et le polyfill AbortController . vous pouvez détecter les anciens navigateurs et utiliser également les polyfills de manière conditionnelle :
la source
À partir de février 2018,
fetch()
peut être annulé avec le code ci-dessous sur Chrome (lire Utilisation de flux lisibles pour activer la prise en charge de Firefox). Aucune erreur n'est levée pourcatch()
le ramassage, et c'est une solution temporaire jusqu'à ce qu'elleAbortController
soit complètement adoptée.la source
Pour l'instant, il n'y a pas de solution appropriée, comme le dit @spro.
Cependant, si vous avez une réponse en vol et utilisez ReadableStream, vous pouvez fermer le flux pour annuler la demande.
la source
Faisons polyfill:
N'oubliez pas que le code n'est pas testé! Faites-moi savoir si vous l'avez testé et que quelque chose n'a pas fonctionné. Il peut vous avertir que vous essayez d'écraser la fonction «récupérer» de la bibliothèque officielle JavaScript.
la source