Die asynchrone Programmierung in JavaScript wurde allmählich von allen akzeptiert. Bisher haben es die Leute normalerweise durch Callback -Verschachtel, SetTimeout, SetInterval usw. implementiert. Der Code sieht sehr unintuitiv aus, und es ist schwierig, schnell zu verstehen, ohne die gesamte Codelogik zu betrachten. Die asynchronen Funktionen in JavaScript umfassen E/A -Funktionen (Ajax, Postmessage, IMG -Lade, Skriptlast usw.), Zeitfunktionen (setTimeout, setInterval) usw.
Wir sind alle mit diesen vertraut. In komplexen Anwendungen gibt es häufig mehrere Nistschichten, und selbst der Meinung, dass einige Schritte nicht abgeschlossen wurden und die Programmausnahmen verursacht werden. Das einfachste Beispiel ist: Wenn Sie beispielsweise einen Knoten in das DOM injizieren, müssen Sie darauf warten, dass der Knoten injiziert wird und den Knoten bedient. Wenn eine große Anzahl von Knoten injiziert wird, ist es oft schwierig, die Zeit zu erfassen. Wenn wir den Code haben, um uns auf die Daten von APIs von Drittanbietern zu verlassen. Wir können nicht lernen, wie Latenz eine API -Antwort ist, und andere Teile der Anwendung können blockiert werden, bis sie das Ergebnis zurückgibt. Versprechen bieten eine bessere Lösung für dieses Problem, es ist nicht blockierend und wird vollständig vom Code entkoppelt.
Lassen Sie mich also einen Blick auf die asynchrone Programmierung in JavaScript werfen. Erstens empfehle ich Ihnen, sich die relativ beliebten Versprechen/eine Spezifikation anzusehen.
Versprechen/eine Spezifikation
Hinweis: Zur einfachen Verständnis kann die Beschreibung von den Versprechen/einer Spezifikation abweichen.
CommonJS 'Versprechen/eine Spezifikation vereinfacht die asynchrone Programmierung, indem sie API -Schnittstellen standardisieren und unser asynchroner Logikcode leichter zu verstehen.
Wir nennen die Implementierung der Versprechen/eine Spezifikation. Das Versprechensobjekt hat nur drei Staaten: unerfüllt, erfüllt und fehlgeschlagen; Es wurde ursprünglich mit einem unerfüllten Zustand erstellt, und der Staat kann sich nur von unerfüllt zu erfüllter oder unerfüllt zu fehlgeschlagen ändern (fehlgeschlagen/abgelehnt). Sobald der Staat erfüllt (abgeschlossen) oder fehlgeschlagen ist (fehlgeschlagen/abgelehnt), kann sich der Staat nicht mehr ändern.
Die Versprechen/A -Spezifikation liefert eine Lösung, um das Konzept der Verzögerung (oder zukünftigen) in einem Programm zu beschreiben. Die Hauptidee besteht nicht darin, eine Methode auszuführen und dann die Anwendung zu blockieren und darauf zu warten, dass das Ergebnis zurückkehrt, bevor sie andere Methoden zurückrufen, sondern um ein Versprechensobjekt zurückzugeben, um das zukünftige Zuhören zu erfüllen. Sowohl der erfüllte Zustand als auch der gescheiterte Zustand können angehört werden. Versprechen Registrierrückrufe, indem Sie eine damalige Schnittstelle implementieren, um das Versprechensobjekt zurückzugeben:
Die Codekopie lautet wie folgt: dann (FultredHandler, ERRAGEHANDLER, ProgressHandler);
Dann wird die Schnittstelle verwendet, um auf verschiedene Zustände eines Versprechens zu hören. Der FunnedHandler wird verwendet, um auf den erfüllten Zustand zu hören, der Fehlerhandler wird verwendet, um auf den fehlgeschlagenen Zustand zuzuhören, und der ProgressHandler wird verwendet, um auf den unerfüllten Zustand zuzuhören. Promise zwingt kein unerfülltes Ereignishören (zum Beispiel wissen wir, dass die alte Version von JQuery (1,5, 1.6) eine Auflagerung von Versprechen ist, aber das unerfüllte Staat zuhörte und nicht implementiert.
Es wird allgemein angenommen, dass die damalige Schnittstelle ein neues Versprechensobjekt zurückgibt, nicht das ursprüngliche Versprechensobjekt. Dieses neue neue Versprechensobjekt kann als Ansicht des ursprünglichen Versprechensobjekts verstanden werden. Es enthält nur eine Reihe von Methoden des ursprünglichen Versprechensobjekts. Diese Methoden können nur den Status des ursprünglichen Versprechensobjekts beobachten, können jedoch den internen Zustand des aufgeschobenen Objekts nicht ändern. Dies kann Konflikte zwischen mehreren Anrufern vermeiden, die den Zustand des neuen Versprechensobjekts ändern können, ohne andere Anrufer zu beeinflussen.
Darüber hinaus bietet Promise zwei Schnittstellen, die staatliche Übergänge von der Resolve (Implementierungsstatus von unvollendet bis abgeschlossen) und ablehnen (Implementierungsstatus von unvollendet zu ablehnen oder fehlgeschlagen) implementieren.
Senden Sie ein Bild, um zu verstehen:
Mit Versprechen können Sie eine asynchrone Logik mit einer synchronen Denkweise schreiben. In asynchronen Funktionen können Sie Try/Catch nicht verwenden, um Ausnahmen zu fangen, und Sie können keine Ausnahmen werfen. Mit Versprechen können wir einen Fehlerhandler direkt explizit definieren, der dem Fang von Ausnahmen entspricht.
Im Folgenden finden Sie mehrere Klassenbibliotheken, die den Versprechen/A -Spezifikationen folgen, wann, Q, rsvp.js, jQuery.deferred usw.