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
1. Im Web unterstützte Bildformate: GIF: kann 256...
Kürzlich stellte mir ein Freund eine Frage: Beim ...
Vorwort innodb_data_file_path wird verwendet, um ...
Inhaltsverzeichnis 1. Gemeinsame Indexbeschreibun...
Dieses Beispiel nimmt die Installation von Python...
Diese Frage ist eine Diskussion unter Internetnut...
Wirkung der OperationCode-Implementierung html &l...
Vorwort: In MySQL wird die Funktion CONCAT() verw...
Inhaltsverzeichnis Abfrage zum Verbinden mehrerer...
Nachdem Sie VMware installiert und eine neue virt...
Grundlagen Eine Transaktion ist eine atomare Oper...
Die meisten Leute kompilieren MySQL und legen es ...
Schauen wir uns die detaillierte Methode zum Erst...
*** Beispiel für das Festlegen des Stils eines Hy...
<br />Originaltext: http://jorux.com/archive...