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
Manchmal möchten wir, dass die Textfelder im Formu...
Inhaltsverzeichnis Umsetzungsideen Es gibt drei M...
Vorwort Zuerst wollte ich es mit wget auf CentOS8...
Es gibt zwei spezielle Werte, die jeder Eigenscha...
Inhaltsverzeichnis 1 Testumgebung 1.1 Server-Hard...
1. Melden Sie sich zunächst auf der Alibaba Cloud...
Inhaltsverzeichnis MySQL-Einschränkungsoperatione...
In diesem Artikelbeispiel wird der spezifische Co...
Inhaltsverzeichnis PXE implementiert die unbeaufs...
1. MySQL-Exportdatei: SELECT `pe2e_user_to_compan...
Inhaltsverzeichnis Vergleichen Sie die leere Zeic...
Um zu vermeiden, dass für den Betrieb immer wiede...
In diesem Artikel erfahren Sie, wie Sie mit JavaS...
In diesem Artikel wird der spezifische Code von j...
Hintergrund: Ich möchte einen SAP ECC Server inst...