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

Was bedeuten CN2, GIA, CIA, BGP und IPLC?

Was ist die CN2-Linie? CN2 steht für China Teleco...

Ausführliches Installationstutorial für MySQL Installer Community 5.7.16

Dieser Artikel zeichnet das ausführliche Tutorial...

Detaillierte Erläuterung der Nginx Rewrite-Nutzungsszenarien und Codebeispiele

Nginx Rewrite-Nutzungsszenarien 1. Sprung der URL...

JS-Prinzip der asynchronen Ausführung und Rückrufdetails

1. JS-Prinzip der asynchronen Ausführung Wir wiss...

Anwendung zur Verarbeitung von HTML-Tag-Überläufen

Verwenden Sie CSS, um Bildlaufleisten zu ändern 1...

Eine kurze Diskussion über die häufig verwendeten APIs der VUE uni-app

Inhaltsverzeichnis 1. Routing und Seitensprung 2....

Velocity.js implementiert den Seiten-Scrolling-Umschalteffekt

Heute werde ich ein kleines Javascript-Animations...

Eine kurze Diskussion über die Eigenschaften von CSS-Float

In diesem Artikel werden die Eigenschaften von CS...

Zusammenfassung einiger Tipps zum MySQL-Indexwissen

Inhaltsverzeichnis 1. Grundkenntnisse der Indizie...

Grafisches Tutorial zur Installation von MySQL 8.0.12

MySQL8.0.12-Installationstutorial, mit allen teil...