Axios storniert Anfragen und vermeidet doppelte Anfragen

Axios storniert Anfragen und vermeidet doppelte Anfragen

Herkunft

Eine bestimmte Seite muss alle Daten herunterladen, die herunterzuladende Datenmenge ist groß und die Schnittstellenverzögerung ist lang ...

Das anfängliche Laden der Daten einer bestimmten Seite dauert lange, aber eine einzelne Suche ist schnell. Wenn die anfänglichen Daten geladen sind, wird die Suchoberfläche zurückgegeben, und die anschließende Rückgabe der anfänglichen Daten deckt die Anzeige der gesuchten Daten ab....

Diese Situationen erfordern von uns:

  • Möglichkeit, eine Anfrage manuell abzubrechen/zu beenden.
  • Einige Seitenschnittstellen können jeweils nur eine Anfrage gleichzeitig haben.

Status Quo

Das System ist eine Sekundärentwicklung basierend auf dem Open Source Vue-Element-Admin von Laoge Huakucha. Die Anfrage verwendet Axios und der Schlüsselcode der gekapselten Anfrage.js lautet wie folgt:

// eine Axios-Instanz erstellen
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API, // URL = Basis-URL + Anforderungs-URL
  withCredentials: true, // sende Cookies bei domänenübergreifenden Anfragen
  Timeout: 500000, // Anforderungs-Timeout
  transformRequest: [Funktion(Daten) {
    // Führe eine beliebige Konvertierung der Daten aus returniere Qs.stringify({
      ...Daten
    },
    // Array-Konvertierung { arrayFormat: 'brackets' })
  }]
})

// Interceptor anfordern
Dienst.Interceptors.Anfrage.Verwenden(
  Konfiguration => {
    // etwas tun, bevor die Anfrage gesendet wird

    wenn (store.getters.token) {
      // Jede Anfrage soll ein Token enthalten
      // ['X-Token'] ist ein benutzerdefinierter Header-Schlüssel
      // Bitte ändern Sie es entsprechend der tatsächlichen Situation
      config.headers['token'] = getToken()
    }
    Konfiguration zurückgeben
  },
  Fehler => {
    // etwas tun mit dem Anfragefehler
    console.log(error) // zum Debuggen
    returniere Promise.reject(Fehler)
  }
)

Methode zum Initiieren der Anfrage:

Exportfunktion remoteApi(Daten) {
  Rückgabeanforderung({
    URL: „/API“,
    Methode: 'post',
    Daten
  })
}

Anfrage abbrechen cancelToken

Seine offizielle Dokumentation: Abbrechen:

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.');

Geänderte Anfragemethode

Exportfunktion remoteApi(Daten, CancelToken) {
  Rückgabeanforderung({
    URL: „/API“,
    Methode: 'post',
    Token abbrechen,
    Daten
  })
}

Erstellen Sie bei einer tatsächlichen Anfrage einen CachelToken:

// In der Komponentenmethode this.cancelToken = CancelToken.source()
remoreApi(Daten, dies.cancelToken).dann(....).catch(....).finally(....)

Um eine Anfrage abzubrechen, führen Sie Folgendes aus:

// In der Komponentenmethode this.cancelToken.cancel('Download abbrechen')

Vermeidung doppelter Anfragen

Vermeiden Sie wiederholte Anfragen an eine Schnittstelle, um zu verhindern, dass die Rückgabedaten der Schnittstelle mit einer längeren Verzögerung die Rückgabedaten einer anderen Schnittstelle überschreiben und so Datenanzeigefehler verursacht werden. Die Idee ist relativ einfach: Es wird eine globale Map zum Speichern von Anforderungskennungen und entsprechenden CancelTokens verwendet. Rufen Sie vor dem Initiieren einer Anforderung die Abbruchmethode des entsprechenden Abbruchtokens gemäß der Anforderungskennung auf und geben Sie dann eine neue Anforderung aus, um die Bedingungen zu erfüllen.

Zusammenfassen

Dies ist das Ende dieses Artikels zum Abbrechen von Axios-Anfragen und zum Vermeiden doppelter Anfragen. Weitere Informationen zum Abbrechen von Axios-Anfragen finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Globale Anforderungsparametereinstellungen von Axios, Anforderungs- und Rückgabe-Interceptormethoden
  • Schritte für Vue zum Kapseln von Axios-Anfragen und -Interceptors
  • Vue Axios wiederholtes Klicken bricht die letzte Anforderungskapselungsmethode ab
  • So stornieren Sie wiederholte und nutzlose Anfragen in Axios
  • Axios storniert wiederholte Anfragen
  • Der Vue Axios Interceptor verwendet häufig die wiederholte Stornierung von Anforderungen

<<:  Detaillierte Erläuterung des MLSQL-Beispiels zur Berechtigungssteuerung zur Kompilierungszeit

>>:  Eine kurze Analyse der vsftpd-Dienstkonfiguration unter Linux (anonym, Benutzer, virtueller Benutzer)

Artikel empfehlen

So deinstallieren Sie Node und NPM vollständig auf dem Mac

npm deinstallieren sudo npm deinstallieren npm -g...

Warum sind die Bilder in mobilen Web-Apps nicht klar und sehr verschwommen?

Warum? Am einfachsten lässt es sich so ausdrücken:...

Detaillierte Erklärung der Rahmen- und Regelattribute der Tabelle in HTML

Die Rahmen- und Regelattribute des Tabellentags k...

Schritte der MySQL-Methode zum Bestimmen, ob es sich um eine Teilmenge handelt

Inhaltsverzeichnis 1. Problem 2. Lösung Option 1:...

Einführung, Installation und Verwendung von Hyper-V (detaillierte Abbildungen)

Vorwort: Als Gigant in der IT-Branche ist Microso...

So konfigurieren Sie zwei oder mehr Sites mit dem Apache-Webserver

So hosten Sie zwei oder mehr Sites auf dem belieb...

Schritte zur Installation von MySQL 5.7.10 auf Windows Server 2008 R2

Installation mithilfe des MSI-Installationspakets...

VMware ESXi 5.5 Bereitstellungs- und Konfigurationsdiagrammprozess

Inhaltsverzeichnis 1. Installationsvoraussetzunge...

Strategie zur Optimierung der Leistung von MySQL-Datenbankabfragen

Optimieren von Abfragen Verwenden der Explain-Anw...

Lösung für vergessenes Linux MySQL-Root-Passwort

Wenn Sie sich bei der Verwendung der MySQL-Datenb...

Verwendung von Umgebungsvariablen in Docker und Lösungen für häufige Probleme

Vorwort Docker kann Umgebungsvariablen für Contai...

Detaillierte Erläuterung der Komponentenentwicklung des Vue-Dropdown-Menüs

In diesem Artikelbeispiel wird der spezifische Co...

So implementieren Sie einen Kennwortstärke-Detektor in React

Inhaltsverzeichnis Vorwort verwenden Komponentens...