Istnieje nowy interfejs API do wysyłania żądań z JavaScript: fetch (). Czy istnieje wbudowany mechanizm anulowania tych żądań podczas lotu?
javascript
ajax
fetch-api
Sam Lee
źródło
źródło
Odpowiedzi:
TL / DR:
fetch
obsługuje terazsignal
parametr od 20 września 2017 r., ale obecnie nie wszystkie przeglądarki obsługują ten parametr .AKTUALIZACJA 2020: Większość głównych przeglądarek (Edge, Firefox, Chrome, Safari, Opera i kilka innych) obsługuje tę funkcję , która stała się częścią standardu DOM . (od 5 marca 2020 r.)
Jest to zmiana, którą wkrótce zobaczymy, więc powinieneś być w stanie anulować żądanie za pomocą
AbortController
sAbortSignal
.Długa wersja
Jak:
Sposób działania jest następujący:
Krok 1 : Tworzysz
AbortController
(na razie właśnie tego użyłem )const controller = new AbortController()
Krok 2 : Otrzymasz
AbortController
sygnał s w ten sposób:const signal = controller.signal
Krok 3 : Przekazujesz
signal
do pobrania tak:Krok 4 : Porzuć, gdy tylko chcesz:
controller.abort();
Oto przykład jego działania (działa w przeglądarce Firefox 57+):
Źródła:
źródło
AbortController is not defined
. W każdym razie jest to tylko dowód koncepcji, przynajmniej ludzie z Firefoksem 57+ mogą zobaczyć, jak działahttps://developers.google.com/web/updates/2017/09/abortable-fetch
https://dom.spec.whatwg.org/#aborting-ongoing-activities
działa w Edge 16 (2017-10-17), Firefox 57 (14.11.2017), Desktop Safari 11.1 (2018-03-29), iOS Safari 11.4 (2018-03-29), Chrome 67 (2018-05 -29) i później.
w starszych przeglądarkach możesz używać wielopełniacza github whatwg-fetch i wielopełniacza AbortController . możesz wykrywać starsze przeglądarki i warunkowo korzystać z wypełniaczy :
źródło
Od lutego 2018 r.
fetch()
Można go anulować za pomocą poniższego kodu w Chrome (przeczytaj Korzystanie z czytelnych strumieni, aby włączyć obsługę przeglądarki Firefox). Błąd nie jest zgłaszanycatch()
do odebrania, a jest to rozwiązanie tymczasowe, dopóki nieAbortController
zostanie w pełni przyjęte.źródło
Na razie nie ma właściwego rozwiązania, jak mówi @spro.
Jeśli jednak masz odpowiedź w locie i używasz ReadableStream, możesz zamknąć strumień, aby anulować żądanie.
źródło
Let's polyfill:
Pamiętaj, że kod nie jest testowany! Daj mi znać, jeśli go przetestowałeś i coś nie działało. Może wyświetlać ostrzeżenia, że próbujesz zastąpić funkcję „pobierania” z oficjalnej biblioteki JavaScript.
źródło