1. Was ist Promise
2. Grundlegende Verwendung Das
const promise = new Promise(Funktion(lösen, ablehnen) { // ... if (/* asynchroner Vorgang erfolgreich*/){ Auflösung (Wert); } anders { ablehnen(Fehler); } }); Nachdem
Versprechen.dann(Funktion (Wert){ // .... },Funktion (Fehler){ // .... ähm }) Versprechen.dann(Funktion (Wert){ // .... }).catch(Funktion (Fehler){ // .... }) 3. Promise-Methoden 3.1 Versprechen.prototype.then() Die Die loadData().then(Funktion (Wert){ Rückgabe 3 }).dann(Funktion (num){ console.log("ok", num) // 3 }) 3.2 Versprechen.prototype.catch() Mit der const promise = new Promise(Funktion(lösen, ablehnen) { throw new Error('unbekannter Fehler'); // Fehlerstatusänderungen auslösen in -> Ablehnen }); const promise = new Promise(Funktion(lösen, ablehnen) { reject('unbekannter Fehler') // Verwenden Sie die Methode reject(), um den Status in -> reject zu ändern. }); versprechen.catch(Funktion(Fehler) { konsole.log(Fehler); }); Der Fehler loadData().then(Funktion(Wert) { gibt loadData(Wert) zurück; }).dann(Funktion(Benutzer) { }).catch(Funktion(err) { // Fehler der ersten drei Promises behandeln }); Wenn wir const promise = new Promise(Funktion(lösen, ablehnen) { resolve(a) // Referenzfehler: a ist nicht definiert }); Versprechen.dann(Funktion(Wert) { console.log('Wert ist ', Wert) }); setTimeout(() => { console.log('Code wird ausgeführt') }, 1000); // Code wird ausgeführt 3.3 Versprechen.prototype.finally() versprechen .dann(Ergebnis => {···}) .catch(Fehler => {···}) .finally(() => {···}); 3.4 Versprechen.alles() const Versprechen = Versprechen.alles([p1, p2, p3]); Der neue
const verspricht = [1,2,3,4].map(Funktion (ID) { gibt loadData(id) zurück; }); Promise.all(Versprechen).dann(Funktion (Benutzer) { // ... }).catch(Funktion(Fehler){ // ... }); 3.5 Versprechen.race() Die Parameter der Methode const Versprechen = Versprechen.race([p1, p2, p3]);
Szenario 1: Nachdem sich ein Benutzer auf der Homepage einer Social-Networking-Site angemeldet hat, fordert er asynchron an, Benutzerinformationen, Follower-Liste und Fan-Liste abzurufen. Wir müssen sicherstellen, dass alle Datenanforderungen erfolgreich sind, bevor wir die Seite rendern. Wenn eine der Daten fehlschlägt, wird die Seite umgeleitet. Hier können wir Funktion initUserHome() { Versprechen.alles([ neues Versprechen(getMe), neues Versprechen (getFollows), neues Versprechen (getFans) ]) .dann(Funktion(Daten){ // Seite anzeigen }) .catch(Funktion(Fehler){ // .... Seite umleiten }); }; initUserHome(); Szenario 2: Wenn wir eine Ticket-Grabbing-Software erstellen, müssen wir jedes Mal nur das erste abgeschlossene Promise zurückgeben, obwohl wir viele Ticketverkaufskanäle anfordern. Hier können wir Funktion getTicket() { Versprechen.race([ neues Versprechen (postASell), neues Versprechen (postBSell), neues Versprechen (postCSell) ]) .dann(Funktion(Daten){ // Ticketerwerb erfolgreich}) .catch(Funktion(Fehler){ // .... das Ticket konnte nicht abgerufen werden. Versuchen Sie es erneut}); }; getTicket(); 3.6 Versprechen.allSettled() Wenn bei Verwendung const-Anfragen = [ holen('/url1'), holen('/url2'), holen('/url3'), ]; versuchen { warte auf Promise.all(Anfragen); console.log('Alle Anfragen waren erfolgreich.'); } fangen { console.log('Eine Anfrage ist fehlgeschlagen, andere Anfragen sind möglicherweise noch nicht abgeschlossen.'); } Manchmal möchten wir warten, bis eine Gruppe asynchroner Vorgänge abgeschlossen ist, bevor wir mit dem nächsten Schritt fortfahren. Zu diesem Zeitpunkt müssen Sie const-Anfragen = [ holen('/url1'), holen('/url2'), holen('/url3'), ]; warte auf Promise.allSettled(Anfragen); console.log('Ausführen, nachdem alle Anfragen abgeschlossen sind (einschließlich Erfolg und Fehlschlag)'); 3.7 Versprechen.any() Sobald eines der eingehenden Zurück zum Szenario des Ticket-Grabbings über mehrere Kanäle mithilfe von Funktion getTicket() { Versprechen.irgendein([ neues Versprechen (postASell), neues Versprechen (postBSell), neues Versprechen (postCSell) ]) .dann(Funktion(Daten){ // Ein Ticket wurde erfolgreich ergattert}) .catch(Funktion(Fehler){ // .... alle Kanäle sind ausgefallen }); }; getTicket(); 3.8 Versprechen.auflösen() neues Versprechen(lösen => lösen(1)) Die übergebenen Parameter sind unterschiedlich.
lass dann = { dann: Funktion(auflösen, ablehnen) { Entschlossenheit (1); } };
const promise = Versprechen.resolve(1); versprechen.dann(Funktion (Wert) { console.log(Wert) // 1 });
3.9 Versprechen.ablehnen() Die Methode const promise = Promise.reject('unbekannter Fehler'); // entspricht const promise = new Promise((resolve, reject) => reject('unbekannter Fehler')) versprechen.dann(null, Funktion (en) { Konsole.log(s) }); //unbekannter Fehler 4. Einfache SzeneBilder asynchron laden: Funktion loadImageAsync(url) { returniere neues Promise(Funktion(auflösen, ablehnen) { const image = neues Bild(); image.onload = auflösen; image.onerror = ablehnen; bild.src = URL; }); } Verarbeitung des Anforderungstimeouts: //Anforderungsfunktion request(){ returniere neues Promise(Funktion(auflösen, ablehnen){ // Code .... lösen('Anfrage ok') }) } Funktion TimeoutHandle(Zeit){ returniere neues Promise(Funktion(auflösen, ablehnen){ setzeTimeout(Funktion(){ ablehnen('Zeitüberschreitung'); }, Zeit); }); } Versprechen.race([ Anfrage(), Zeitüberschreitungshandle(5000) ]) .dann(res=>{ Konsole.log(res) }).catch(err=>{ console.log(err) // Zeitüberschreitung }) Dies ist das Ende dieses Artikels über Das könnte Sie auch interessieren:
|
<<: Eine kurze Diskussion über die Eigenschaften von CSS-Float
>>: HTML-Formular-Tag-Tutorial (5): Textfeld-Tag
In diesem Artikel finden Sie eine Sammlung von Ja...
Inhaltsverzeichnis 1. Proxy im LAN 2. Intranet-Pe...
zabbix Zabbix ([`zæbiks]) ist eine Open-Source-Lö...
Das folgende Skript wird für die geplante Sicheru...
Wie lade ich MySQL von der offiziellen Website he...
Dies ist der Effekt der Element-UI-Ladekomponente...
Problem 1: Baidu Map verwendet gekachelte Bilder ...
Vorwort Das Grundprinzip der MySQL-Master-Slave-R...
Inhaltsverzeichnis Hafenbezogene Konzepte: Bezieh...
Inhaltsverzeichnis Vorwort 1. Der Prozess der Ver...
Inhaltsverzeichnis Überblick Definieren von Metho...
Inhaltsverzeichnis 1. Ressourcendateien 2. Instal...
Inhaltsverzeichnis 1. Docker ermöglicht Fernzugri...
Inhaltsverzeichnis 1: Bereiten Sie das https-Zert...
In diesem Artikel wird die Installations- und Kon...