ÜberblickVersprechen haben nur drei Zustände: ausstehend, gelöst und abgelehnt. Sobald ein asynchrones Versprechen ausgegeben wurde, kann es nach dem Warten (ausstehend) am Ende nur erfolgreich sein oder fehlschlagen und kann nicht zwischendurch abgebrochen (abgebrochen) werden. Es gibt zwei Möglichkeiten, eine Abbruchfunktionalität für Promises bereitzustellen:
Es gibt zwei Modi für die manuelle Implementierung der Abbruchmethode: Beide verlassen sich auf die Promise-Schnittstelle, um sie indirekt zu implementieren. Promise Race Methodelet PromiseWithAbort = Funktion(Versprechen){ lass _abort = null; lass Pabort = neues Versprechen((res,rej)=>{ _abort = Funktion(Grund ='abbrechen !'){ konsole.warnen(Grund); rej (Grund); } }); lass Rennen = Promise.race([Versprechen,Pabort]); Rennen.abbrechen = _abbrechen; console.log(Versprechen,Pabort); Rückrennen; } lass p1 = neues Versprechen(res=>{ setzeTimeout(()=>{ res('p1 Erfolg'); },2000) }) Lassen Sie testP = PromiseWithAbort(p1); testP.dann(res=>{ console.log('Erfolg:',res); },Fehler=>{ console.log('Fehler:',Fehler); }) testP.abort(); // Ergebnis: Ablehnen: Abbrechen! Versprechen neu verpackenKlasse PromiseWithAbort { Konstruktor(fn){ lass _abort = null; lass _p = neues Versprechen((res,rej)=>{ fn.call(null,res,rej); _abort = Funktion(Fehler='abort'){ rej(Fehler); } }) _p.abort = _abort; gibt _p zurück; } } lass testP = neues PromiseWithAbort((res,rej)=>{ setzeTimeout(() => { Ergebnis(1); },1000); }); testP.dann(r=>{ Konsole.log('res:',r); },r=>{ Konsole.log('rej:',r); }); testP.abort(); //Ergebnis: rej: Abbruch AbortController(Dies ist eine experimentelle Funktion der DOM-Spezifikation, und in einigen Browsern befindet sie sich noch in der Entwicklung.) Die Schnittstelle AbortController stellt ein Controllerobjekt dar, mit dem Sie bei Bedarf eine oder mehrere DOM-Anfragen abbrechen können. // Abrufanforderung unterbrechen let controller = new AbortController(); lass signal = controller.signal; holen('https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise/finally',{signal}).dann(r=>{ konsole.log(r); }); controller.abort(); // Ergebnis: Nicht abgefangene (im Versprechen) DOMException: Der Benutzer hat eine Anfrage abgebrochen. //Ein Versprechen unterbrechen Klasse PromiseWithAbortController { Konstruktor(fn,{signal}){ wenn (Signal && Signal.abgebrochen) { return Promise.reject(neue DOMException('Abgebrochen','AbortError')); } let _p = neues Versprechen((lösen,ablehnen)=>{ fn.call(null,auflösen,ablehnen); wenn(Signal){ signal.addEventListener('abbrechen',()=>{ ablehnen(neue DOMException('Abgebrochen','Abbruchfehler')); }) } }); gibt _p zurück; } } let controller = neuer AbortController(); lass signal = controller.signal; lass testP2 = neuer PromiseWithAbortController((r,j)=>{ setzeTimeout(() => { r('Erfolg'); }, 1000); },{Signal}); testP2.then(r=>{ Konsole.log('res:',r); },r=>{ Konsole.log('rej:',r); }); controller.abort(); // Ergebnis: rej: DOMException: Abgebrochen Axios-Plugin verfügt über eine Abbruchfunktion//1. Quelltoken verwenden 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 (der Nachrichtenparameter ist optional) source.cancel('Vorgang vom Benutzer abgebrochen.'); //2. Durch die ausgehende Funktion const CancelToken = axios.CancelToken; abbrechen lassen; axios.get('/Benutzer/12345', { cancelToken: neues CancelToken(Funktion Executor(c) { // Eine Executor-Funktion erhält eine Abbruchfunktion als Parameter abbrechen = c; }) }); // die Anfrage abbrechen stornieren(); //Main: Anfragen mit demselben Token können gemeinsam storniert werden Axios wird in aktuellen Projekten am häufigsten verwendet. Machen Sie sich also keine Sorgen, wenn Sie die Anfrage stornieren. Der DOM-spezifizierte AbortController wird aus Kompatibilitätsgründen nicht empfohlen. Wenn Sie es selbst implementieren müssen, sind die ersten beiden Methoden im Artikel sicherer (Promise-Race-Methode und Repackage-Promise-Methode). Oben finden Sie Einzelheiten dazu, wie JS Promises eine Abbruchfunktion hinzufügt. Weitere Informationen zu JS finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Implementierungsmethode und Beispielcode des Tomcat-Klassenladers
Inhaltsverzeichnis Überblick Definition Instanzme...
Dieser Artikel ist eine MySQL-Konfigurationsdatei...
Inhaltsverzeichnis Vorwort Vorschau Text Grafikko...
Code: <input Typ="text" Klasse="...
Confluence ist kostenpflichtig, kann aber für die...
Heute bin ich beim Entwickeln auf eine Methode ge...
Docker ist eine Open-Source-Container-Engine, mit...
Fehler tritt auf: Beim Exportieren der Datenbank ...
1: Download von der offiziellen MySQL-Website htt...
1. Abfragevorgang Prozessliste anzeigen 2. Fragen...
Als absoluter Neuling habe ich gerade angefangen,...
Was ist das? Spring Boot ist ein Unterprojekt der...
Das folgende Skript wird für die geplante Sicheru...
Installieren Sie CentOS 7 nach der Installation v...
Die in HTML häufig verwendeten Escape-Zeichen wer...