Ü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 Zweck des Teleports So funktio...
Inhaltsverzeichnis Docker-System df Docker-System...
Inhaltsverzeichnis 1. Was ist eine Richtlinie? Ei...
Inhaltsverzeichnis 1. Bedingte Zugriffsattribute ...
Inhaltsverzeichnis Vorne geschrieben Anforderungs...
Installation der MySQL-Dekomprimierungsversion un...
Weitere Informationen zu Bedienelementen finden S...
In diesem Artikelbeispiel wird der spezifische Co...
1. Einleitung Vor einiger Zeit gab es eine Reihe ...
Im Allgemeinen : [1 wichtige Flagge] > [4 beson...
Dieser Artikel stellt die Installation und Verwen...
React ist eine Open-Source-JavaScript-Bibliothek,...
Anaconda-Installation Anaconda ist ein Softwarepa...
Als ich heute VMware verwendete, um eine neue vir...
Heute bin ich etwas verwirrt über <a href="...