Der Vue Axios Interceptor verwendet häufig die wiederholte Stornierung von Anforderungen

Der Vue Axios Interceptor verwendet häufig die wiederholte Stornierung von Anforderungen

Einführung

Im vorherigen Artikel wurden die einfache Kapselung von Axios sowie die Anwendungsszenarien und -methoden von Axios-Interceptors vorgestellt. Sehen wir uns heute an, wie der Interceptor mit Situationen umgeht, in denen die Antwortzeit zu lang und die Anzahl der Anforderungen zu hoch ist.

So stornieren Sie eine Anfrage

Axios verwendet den intern bereitgestellten CancelToken, um die Anfrage abzubrechen

Offizielles Website-Beispiel 1: Verwenden Sie die Factory-Methode CancelToken.source, um ein Abbruch-Token zu erstellen, wie folgt

const CancelToken = axios.CancelToken;
const Quelle = CancelToken.source();

axios.get('/Benutzer/12345', {
  cancelToken: Quelle.Token
}).catch(Funktion(geworfen) {
  wenn (axios.isCancel(geworfen)) {
    console.log('Anfrage abgebrochen', thrown.message);
  } anders {
     // Fehler behandeln }
});

axios.post('/Benutzer/12345', {
  Name: „Neuer Name“
}, {
  cancelToken: Quelle.Token
})

// Anfrage abbrechen (Nachrichtenparameter ist optional)
source.cancel('Vorgang vom Benutzer abgebrochen.');

Beispiel 2 von der offiziellen Website: Erstellen Sie ein Abbruchtoken, indem Sie eine Executor-Funktion an den CancelToken-Konstruktor übergeben:

const CancelToken = axios.CancelToken;
abbrechen lassen;

axios.get('/Benutzer/12345', {
  cancelToken: neues CancelToken(Funktion Executor(c) {
    // Die Executor-Funktion erhält eine Abbruchfunktion als Parameter cancel = c;
  })
});

// die Anfrage abbrechen
stornieren();

Sie können sehen, dass die oben genannten Abbruchtoken alle in einer einzigen Anfrage erstellt werden. In der tatsächlichen Arbeit müssen wir alle Anfragen verarbeiten. Als nächstes sehen wir uns an, wie die Funktion zum Abbrechen von Anfragen im Interceptor implementiert wird

Abbrechen doppelter Anfragen im Interceptor

Axios von „Axios“ importieren
importiere baseURL aus „./config“
importiere qs von „qs“

const pendingRequest = new Map(); // Anforderungsobjekt const CancelToken = axios.CancelToken;

axios.defaults.timeout = 30000
axios.defaults.baseURL = Basis-URL.Ziel

// Anfrage-Interceptor hinzufügen axios.interceptors.request.use(function(config) {
  // Tun Sie etwas, bevor Sie die Anfrage senden config.headers = {
      'Inhaltstyp': 'Anwendung/JSON',
      "Token": getToken()
  }
  // Den Anforderungsschlüssel abrufen
  let requestKey = getReqKey(Konfiguration);

  // Feststellen, ob es sich um eine wiederholte Anfrage handelt if (pendingRequest.has(requestKey)) { // Es handelt sich um eine wiederholte Anfrage removeReqKey(requestKey); // Abbrechen }else{
    // CancelToken setzen
    config.cancelToken = neues CancelToken(Funktion Executor(Abbrechen) {
      pendingRequest.set(requestKey, abbrechen); // setzen })
  }

  Konfiguration zurückgeben;
}, Funktion (Fehler) {
  // Anforderungsfehler return Promise.reject(error);
});

// Antwort-Interceptor hinzufügen axios.interceptors.response.use(function (response) {
  // RequestKey im Request-Objekt löschen
  let requestKey = getReqKey(response.config);
  entferneReqKey(Anforderungsschlüssel);

  // Etwas mit den zurückgegebenen Daten machen, zum Beispiel den Status abfangen if (response.data.status !== 200) {
      Toast({
        Nachricht: Antwort.Daten.Nachricht,
        Typ: "Warnung",
        Dauer: 1000
      })
      zurückkehren
    }
    
  // Kein Problem, gib die Serverdaten zurück return response.data;
}, Funktion (Fehler) {
  let requestKey = getReqKey(error.config);
  entferneReqKey(Anforderungsschlüssel);
  
  // Antwortfehler return Promise.reject(error);
});

// Den Anforderungsschlüssel abrufen
Funktion getReqKey(Konfiguration) {
  // Der von der Anforderungsmethode, der Anforderungsadresse und den Anforderungsparametern generierte String dient als Grundlage dafür, ob die Anforderung wiederholt werden soll const { method, url, params, data } = config; // Diese Parameter dekonstruieren // GET ---> params POST ---> data
  const requestKey = [Methode, URL, qs.stringify(Params), qs.stringify(Daten)].join('&');
  Anfrageschlüssel zurückgeben;
}

// Doppelte Anfrage abbrechen function removeReqKey(key) {
  const cancelToken = pendingRequest.get(Schlüssel);
  cancelToken(key); // Die zuvor gesendete Anfrage abbrechen pendingRequest.delete(key); // RequestKey im Anfrageobjekt löschen
}

Abschluss

Das Obige ist die Verarbeitung wiederholter Anfragen. Wenn Sie sich über den Interceptor nicht im Klaren sind, können Sie den vorherigen Artikel lesen. Wenn Sie Fragen haben, können Sie mich gerne korrigieren. Ich werde es so schnell wie möglich aktualisieren.

Dies ist das Ende dieses Artikels über die häufige wiederholte Anforderungsstornierung des Vue Axios Interceptor. Weitere verwandte Inhalte zur wiederholten Anforderungsstornierung des Axios Interceptor finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Vue fügt die Nutzung von Anforderungs-Interceptor und Vue-Ressourcen-Interceptor hinzu
  • Vue Axios-Anmeldeanforderungs-Interceptor
  • Zusammenfassung der Wissenspunkte des Vue-Routing-Interceptors und des Request-Interceptors
  • Schritte für Vue zum Kapseln von Axios-Anfragen und -Interceptors
  • Detaillierte Erläuterung der Konfigurationsmethode des Vue-Anforderungs-Interceptors

<<:  MySQL 8.0.20 Window10 kostenlose Installationsversion Konfiguration und Navicat Management Tutorial Grafik detaillierte Erklärung

>>:  Erste Schritte mit dem Alibaba Cloud ECS-Server (unbedingt zu lesendes Tutorial für Neulinge)

Artikel empfehlen

Warum ist die Bildlaufleiste auf der Webseite rechts angebracht?

Warum befinden sich die Bildlaufleisten der Brows...

CSS3 ändert den Bildlaufleistenstil des Browsers

Hinweis: Diese Methode ist nur auf WebKit-basiert...

Funktionsprinzip und Implementierungsmethode der Vue-Anweisung

Einführung in Vue Die aktuelle Ära der großen Fro...

So steuern Sie den Anteil untergeordneter Flex-Elemente auf der Hauptachse

Hintergrund Durch das flexible Layout wird eine e...

JS implementiert kreisförmiges Ziehen und Schieben des Fortschrittsbalkens

In diesem Artikelbeispiel wird der spezifische JS...

Der Prozess der Installation von Docker im Linux-System

In diesem Blog führe ich Sie in einfachen Schritt...

Detaillierte Erklärung der HTML-Download-Funktion

Das neue Projekt ist im Grunde abgeschlossen. Es ...

Beispielanalyse der drei Verbindungsmethoden für virtuelle VMware-Maschinen

NAT Auf diese Weise wird die Netzwerkkarte der vi...

Installieren Sie das Linux-System automatisch basierend auf Cobbler

1. Komponenten installieren yum install epel-rpm-...