Eine kurze Diskussion über die Lösung von Axios zum Entfernen doppelter Anfragen

Eine kurze Diskussion über die Lösung von Axios zum Entfernen doppelter Anfragen

Diese Lösung hat zwei Hauptfunktionen

1. Nachdem die Anfrage gesendet wurde, werden nachfolgende wiederholte Anfragen storniert und nicht verarbeitet, während auf die Fertigstellung der ersten Anfrage gewartet wird.
2. Nach den Routensprüngen werden alle nicht erledigten Anfragen auf der vorherigen Seite gelöscht.

1. Doppelte Anfragen stornieren

Voraussetzungen:

1. Informationen zur von Axios offiziell bereitgestellten Stornierungsmethode finden Sie in den entsprechenden Dokumenten: CancelToken
2.js Map-bezogene Konzepte
3. Sichere Abfragezeichenfolgenanalyse und Zeichenfolgenzerlegungsbibliothek qs, ähnlich dem in js integrierten JSON

Um die Parameterverarbeitung zu vereinfachen, berücksichtigt diese Lösung nur POST-Anfragen, d. h. wenn Methode, URL und Daten identisch sind, wird dies als doppelte Anfrage betrachtet.

// axios.js
const ausstehend = neue Map()
/**
 * Anfrage hinzufügen * @param {Object} config
 **/
const addPending = (Konfiguration) => {
  Konstanten-URL = [
    Konfigurationsmethode,
    konfiguration.url,
    qs.stringify(Konfigurationsdaten)
  ].verbinden('&')
  if (pending.has(url)) { // Wenn eine aktuelle Anfrage aussteht, brechen Sie die nachfolgende Anfrage ab config.cancelToken = new axios.CancelToken(cancel => cancel(`Doppelte Anfragen werden aktiv abgefangen: ${url}`))
  } else { // Wenn die aktuelle Anfrage nicht im Wartestatus vorhanden ist, fügen Sie sie hinzu config.cancelToken = config.cancelToken || new axios.CancelToken(cancel => {
      ausstehend.festlegen(URL, Abbrechen)
    })
  }
}
/**
 * Anfrage entfernen * @param {Object} config
 */
const removePending = (Konfiguration) => {
  Konstanten-URL = [
    Konfigurationsmethode,
    config.url.replace(config.baseURL, ''), // Die Antwort-URL fügt den Domänennamen hinzu, der entfernt werden muss, um mit der Anforderungs-URL übereinzustimmen. qs.stringify(JSON.parse(config.data)) // Muss mit der Anforderungsparameterstruktur übereinstimmen, die Anforderung ist ein Objekt und die Antwort ist eine Zeichenfolge].join('&')
  if (pending.has(url)) { // Wenn die aktuelle Anforderungskennung im Status „pending“ vorhanden ist, brechen Sie die aktuelle Anforderung ab und entfernen Sie „pending.delete(url)“.
  }
}

/* globale Axios-Anforderungsparametereinstellungen, Anforderungs-Interceptor*/
axios.interceptors.request.use(
  Konfiguration => {
    addPending(config) // Füge die aktuelle Anfrage zur ausstehenden Return-Konfiguration hinzu
  },
  Fehler => {
    returniere Promise.reject(Fehler)
  }
)
// Antwort-Interceptor ist Ausnahmebehandlung axios.interceptors.response.use(
  Antwort => {
    removePending(response.config) // Nachdem die Anfrage abgeschlossen ist, entfernen Sie die Antwort dieser Anfrage
  },
  err => {
    wenn (err && err.config) {
      removePending(err.config) // Nachdem die Anfrage abgeschlossen ist, entfernen Sie diese Anfrage}
    returniere Promise.resolve(err.response)
  }
)

2. Alle Anfragen bereinigen

// axios.js
/**
 * Ausstehende Anfragen löschen (wird beim Routing von Umleitungen aufgerufen)
 */
exportiere const clearPending = () => {
  für (const [URL, Abbrechen] von ausstehend) {
    Abbrechen (URL)
  }
  ausstehend.löschen()
}
// router.js
router.beforeEach((bis, von, weiter) => {
  //Routensprung, alle Anfragen löschen clearPending()
  })

Dies ist das Ende dieses Artikels über die Axios-Lösung für Deduplizierungsanfragen. Weitere Informationen zur Axios-Lösung für Deduplizierungsanfragen 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:
  • So verwenden Sie Axios, um mehrere wiederholte Anfragen in einem Projekt zu filtern
  • Axios storniert Anfragen und vermeidet doppelte Anfragen
  • Axios storniert wiederholte Anfragen
  • So stornieren Sie wiederholte und nutzlose Anfragen in Axios
  • Vue Axios wiederholtes Klicken bricht die letzte Anforderungskapselungsmethode ab

<<:  So verhindern Sie mit Nginx die böswillige Auflösung von IP-Adressen

>>:  Detaillierte Erklärung zum Anzeigen und Einstellen des SQL-Modus in MySQL

Artikel empfehlen

Einfache Implementierung zum Ausblenden der Bildlaufleiste in HTML

1. HTML-Tags mit Attributen XML/HTML-CodeInhalt i...

JS realisiert Video-Sperreffekt

Verwenden Sie um dies zu erreichen, die modulare ...

So implementieren Sie Property Hijacking mit JavaScript defineProperty

Inhaltsverzeichnis Vorwort Deskriptoren Detaillie...

Verwendung von TypeScript-Generics

Inhaltsverzeichnis 1. Einfach zu bedienen 2. Verw...

So installieren Sie Nginx schnell unter Linux

Inhaltsverzeichnis Was ist nginx 1. Laden Sie die...

impress.js Präsentationsschicht-Framework (Demonstrationstool) - erste Erfahrungen

Ich habe ein halbes Jahr lang nicht gebloggt, wofü...

Lösung für die Auswirkungen leerer Pfade auf die Seitenleistung

Vor ein paar Tagen habe ich einen von Yu Bo getei...

Grundlagen der MySQL-Speicher-Engine

Im vorherigen Artikel haben wir über MySQL-Transa...

Mysql-Indextypen und grundlegende Anwendungsbeispiele

Inhaltsverzeichnis Index - Allgemeiner Index - Ei...

Ausführliches Tutorial zur Installation von Deepin in VMware15 (Bild und Text)

Vorwort Die Benutzeroberfläche von Deepin sieht w...