Der neue Standard fügt ein natives Versprechen hinzu.
Hier werden wir nur die Verwendung von Ketten diskutieren und über die Details nachdenken.
1. Überprüfung von dann () und catch ()
Die Rückruffunktion kann in die Parameter von dann () und catch () platziert werden, um das Endergebnis eines Versprechens zu erhalten.
Dann kann () einen Parameter erhalten, dann wird dieser Rückruf nur aufgerufen, wenn Versprechen Resolve ().
Dann kann () auch einen zweiten Parameter erhalten, und der zweite Rückruf wird verwendet, um die Situation von Versprechen abzulehnen ().
Catch () behandelt speziell die Situation von Versprechen reject ().
Mit anderen Worten, dann kann () in beide Richtungen verwendet werden, und Catch () kann nur mit Ablehnungen () umgehen. Es wird jedoch empfohlen, dann () zu verwenden, um Resolve () und catch () zu verarbeiten, um Ablehnung () zu behandeln.
2. Was ich jedoch sprechen möchte, ist nicht die oben genannten. Das obige ist nur eine Überprüfung der Grundnutzung. Hier beginnen wir mit den Details der Rückgabewerte und der Kettenverwendung von dann () und der dann () Methode.
Dann besagt die offizielle Dokumentation, dass sowohl dann () als auch Catch () ein Versprechen zurückgeben, was sehr faszinierend ist. (Ich bin ein Neuling in JS und war noch nie früheren Versprechen in freier Wildbahn ausgesetzt.)
Zunächst einmal ist dieses neu zurückgegebene Versprechen nicht das ursprüngliche Versprechen;
Zweitens bezieht sich die Änderung im Zustand des neu zurückgegebenen Versprechens (Resolve () oder Reject ().) Mit dem Zustand des vorherigen Versprechens und wie dann () verwendet wird.
Erklären Sie zuerst die Situation von dann (): (fangen ist ähnlich)
var p1 = drequent.resolve ("Erfolg"); var p2 = p1.then (Task1); var p3 = p2.then (Task2);Hinweis: Die obigen Task1 und Task2 sind beide Rückrufe.
Hier ist P1 ein erstelliges Versprechen und direkt auflösen ();
P2 ist ein Versprechen, das mit dann () () erhalten wurde, und p3 ist auch ein Versprechen, das mit dann () erhalten wurde.
Wie verändert sich der Zustand von P2 und was ist mit P3?
Ich werde die folgende Abbildung verwenden, um dieses Konzept zu erklären:
In,
1. Ein Octagon repräsentiert ein Versprechenobjekt.
2. Der Kreis repräsentiert den Zustand innerhalb eines Versprechens, und der schwarze Pfeil repräsentiert die Zustandsänderung.
3. Der rechte Pfeil repräsentiert das Aufrufen der dann die Funktion.
4. Das heißt, solange die damalige Funktion aufgerufen wird, wird ein neues Versprechensobjekt generiert.
5. Wenn Sie die dann die Funktion aufrufen, wissen Sie nicht, wie der Status des vorherigen Versprechensobjekts ist, ob sie anhängig oder beigelegt ist? Dies kann nicht angenommen werden und kann nicht draußen gesehen werden.
6. Der Ruf der damaligen Funktion wird nicht blockiert, dh p2 und p3 werden fast sofort erzeugt, auch wenn P1 immer noch langsam seinen eigenen Zustand migriert.
Wir wissen, dass der Status von P1 gelöst wird (siehe Code oben). Hier wurde jedoch nicht erklärt, wie sich die Zustände von P2 und P3 ändern, wird es gelöst oder abgelehnt? Schauen Sie sich das neue Bild unten an.
Sie können mehr Diamanten sehen.
Der Diamant repräsentiert die Rückruffunktion, die in dann aufgerufen wird. Der Aufwärts -Rhombus repräsentiert den Prozess der Übergabe in [für das vorhergehende Versprechensobjekt], und der Abwärts -Rhombus repräsentiert den Prozess der Übergabe in [abgelehnt für das vorherige Versprechensobjekt].
HINWEIS: In diesem Beispiel wird keine Verarbeitung für das Ablehnungsabweis eingegeben, dh der Abwärtsdiamant sollte im obigen Bild nicht gezeichnet werden. Aus Gründen der Bequemlichkeit müssen wir nur wissen, dass der Aufwärts- und Abwärtsdiamant mit dem Gebrauch oder dem Fang zusammenhängt. Schauen wir uns den Beispielcode erneut an:
var p1 = drequent.resolve ("Erfolg"); var p2 = p1.then (Task1); // Der Aufwärts -Rhombus wird erzeugt var p3 = p2.then (Task2); // Der Aufwärtshombus wird erzeugtEs ist zu sehen, dass wir nicht den zweiten Parameter von damals geben, dh, wir handeln nicht mit Ablehnungen.
Wenn Sie sich mit dem Ablehnen befassen möchten, können Sie dann verwenden oder fangen. Catch wird speziell für das Ablehnen verwendet. Abgesehen davon gibt es keinen Unterschied zwischen damals.
1. Wenn der endgültige Status von P1 (Auflösung oder Ablehnung) korrekt verarbeitet wird (beim Aufrufen wird der entsprechende Rückruf verabschiedet, dh ein entsprechender Diamant), wird der Status von P2 in die Lösung geändert.
2. Wenn der endgültige Status von P1 (Auflösung oder Ablehnung) nicht korrekt verarbeitet wird (beim Aufrufen fehlt der entsprechende Rückruf, dh es gibt keinen entsprechenden Diamanten), wird der Zustand von P1 an P2 (der Zustand des Empfangs von P1) weitergeleitet.
3. Gehen Sie so weiter.
V.
3. Hier sind einige Beispiele, um diesen Artikel zusammenzufassen.
In der Abbildung wird der Zustand von P1 gegeben und entschlossen oder ablehnt. Ziel ist es, den letzten Zustand von P2 und P3 zu starten.
Die oben genannten sind vier unabhängige Beispiele ohne Verbindung zwischen ihnen.
X bedeutet, dass P3 die dann nicht oder die Fangfunktion verwendet, sodass es keine Möglichkeit gibt, mit Auflösung oder Ablehnung umzugehen.
Wenn es einen Fehler gibt, korrigieren Sie mich bitte rechtzeitig, danke! ~! ! @~~~
Der obige Artikel ausführlich Verständnis der JS Promise-Kette ist der gesamte Inhalt, den ich mit Ihnen geteilt habe. Ich hoffe, es kann Ihnen eine Referenz geben und ich hoffe, Sie können Wulin.com mehr unterstützen.