Es gibt eine neue API für Anfragen aus JavaScript: fetch (). Gibt es einen eingebauten Mechanismus zum Stornieren dieser Anfragen während des Flugs?
javascript
ajax
fetch-api
Sam Lee
quelle
quelle
Antworten:
TL / DR:
fetch
unterstützt jetzt einensignal
Parameter ab dem 20. September 2017, aber derzeit scheinen dies nicht alle Browser zu unterstützen .2020 UPDATE: Die meisten gängigen Browser (Edge, Firefox, Chrome, Safari, Opera und einige andere) unterstützen die Funktion , die Teil des DOM-Lebensstandards geworden ist . (Stand 5. März 2020)
Dies ist eine Änderung, die wir jedoch sehr bald sehen werden. Daher sollten Sie in der Lage sein, eine Anfrage mit einem
AbortController
s abzubrechenAbortSignal
.Lange Version
Wie man:
So funktioniert es:
Schritt 1 : Sie erstellen ein
AbortController
(Vorerst ich nur verwendet diese )const controller = new AbortController()
Schritt 2 : Sie erhalten das
AbortController
s-Signal wie folgt:const signal = controller.signal
Schritt 3 : Sie übergeben das
signal
zu holen wie folgt:Schritt 4 : Brechen Sie einfach ab, wann immer Sie müssen:
controller.abort();
Hier ist ein Beispiel, wie es funktionieren würde (funktioniert unter Firefox 57+):
Quellen:
quelle
AbortController is not defined
. Auf jeden Fall ist dies nur ein Proof of Concept, zumindest Leute mit Firefox 57+ können sehen, dass es funktionierthttps://developers.google.com/web/updates/2017/09/abortable-fetch
https://dom.spec.whatwg.org/#aborting-ongoing-activities
funktioniert in 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) und später.
In älteren Browsern können Sie die whatwg-fetch-Polyfüllung von github und die AbortController- Polyfüllung verwenden . Sie können ältere Browser erkennen und die Polyfills auch bedingt verwenden :
quelle
Stand Februar 2018,
fetch()
kann mit dem folgenden Code in Chrome gekündigt werden (siehe Verwenden lesbarer Streams , um die Firefox-Unterstützung zu aktivieren). Es wird kein Fehlercatch()
zum Aufnehmen ausgegeben, und dies ist eine vorübergehende Lösung, bis sieAbortController
vollständig übernommen ist.quelle
Derzeit gibt es keine richtige Lösung, wie @spro sagt.
Wenn Sie jedoch eine Antwort während des Flugs haben und ReadableStream verwenden, können Sie den Stream schließen, um die Anforderung abzubrechen.
quelle
Lassen Sie uns polyfill:
Bitte beachten Sie, dass der Code nicht getestet wird! Lassen Sie mich wissen, wenn Sie es getestet haben und etwas nicht funktioniert hat. Möglicherweise erhalten Sie Warnungen, dass Sie versuchen, die Funktion "Abrufen" aus der offiziellen JavaScript-Bibliothek zu überschreiben.
quelle