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

Der gesamte Prozess der Installation von Gogs mit Pagoda Panel und Docker

Inhaltsverzeichnis 1 Installieren Sie Docker im B...

Das WeChat-Applet implementiert die Aufnahmefunktion

In diesem Artikel wird der spezifische Code für d...

Docker-Installations- und Konfigurationsschritte für das Redis-Image

Inhaltsverzeichnis Vorwort Umfeld Installieren Er...

So führen Sie SCSS in ein React-Projekt ein

Laden Sie zuerst die Abhängigkeiten herunter Garn...

Detaillierte Erklärung zur Installation und Verwendung von Vue-Router

Inhaltsverzeichnis Installieren Grundlegende Konf...

Zusammenfassung der MySQL-Datenmigration

Inhaltsverzeichnis Vorwort: 1. Über die Datenmigr...

js Canvas zur Realisierung des Gobang-Spiels

In diesem Artikel wird der spezifische Code der L...

Fünf Verzögerungsmethoden für die MySQL-Zeitblindinjektion

Fünf Verzögerungsmethoden für die MySQL-Zeitblind...

Implementierung der Anmeldeseite des tatsächlichen Kampfprotokolls von Vue

Inhaltsverzeichnis 1. Vorbereitende Maßnahmen 1.1...

Eine gründliche Analyse der HTML-Sonderzeichen

Eine gründliche Analyse von HTML (14) Sonderzeich...

So konfigurieren Sie ein Jupyter-Notebook im Docker-Container

Das Jupyter-Notebook wird unter dem Docker-Contai...

Natives JS-objektorientiertes Tippspiel

In diesem Artikel wird der spezifische Code des o...

VPS erstellt Offline-Download-Server (nach der Ära der Netzwerkfestplatten)

Motivation Aus Lerngründen habe ich einen VPS-Die...