Aufgrund des asynchronen Mechanismus von JavaScript ist die Callback-Pyramide ein häufiges Problem:
loadImg('a.jpg', function() { loadImg('b.jpg', function() { loadImg('c.jpg', function() { console.log('all done!'); }); }); });
Promise Wörtlich: Versprechen. Wenn A B anruft und B ein Versprechen an A zurückgibt, kann A den Plan wie folgt schreiben: Wenn B das Ergebnis an mich zurückgibt, führt A den S1-Plan aus. Andernfalls, wenn B A nicht das gewünschte Ergebnis gibt Grund: Dann führt A den Notfallplan S2 aus. In diesem Fall liegen alle potenziellen Risiken in der Kontrolle von A
var resB = B(); var runA = function(){ resB.then(execS1,execS2); };
Wenn A etwas erledigen möchte, darf es nicht auf eine Antwort von B angewiesen sein, dann ändert sich der obige Code Cheng
var resB = B(); var resC = C(); ... var runA = function() { reqB .then(resC, execS2) .then(resD, execS3) .then(resE, execS4) ... .then(execS1); }; runA();
Hier wird jedes Mal, wenn ein Vernehmer eine unerwartete Antwort gibt, ein anderer Verarbeitungsmechanismus verwendet, obwohl die Promise-Spezifikation dies nicht erfordert und sogar keine Verarbeitung erforderlich ist, d. h. (Nicht bestehen). im zweiten Parameter von then) oder einheitlich behandeln
Ein Versprechen kann drei Zustände haben: wartend( ausstehend), abgeschlossen(erfüllt), abgelehnt(abgelehnt)
Der Status eines Versprechens kann sich nur von „wartend“ auf „Gehe zu“ ändern „Abgeschlossen“ oder „Ablehnen“ kann nicht rückgängig gemacht werden
Promise muss die Then-Methode implementieren, (then ist der Kern von Promise) und muss dann a zurückgeben Versprechen, dieselben Versprechen können dann mehrmals aufgerufen werden, und die Reihenfolge der Rückrufausführung ist dieselbe wie die Reihenfolge, in der sie definiert sind.
Die then-Methode akzeptiert zwei Parameter. Der erste Parameter ist ein Rückruf bei Erfolg und der andere ist ein Rückruf bei Fehler. Then kann ein weiteres übergebenes Versprechen akzeptieren und akzeptiert auch ein „. Klasse dann" Objekt oder Methode, also thenable object
kann auf diesen Artikel verweisen JavaScript-Versprechen von html5rocks. Derzeit sind fortgeschrittene Browser wie Chrome und Firefox verfügt über ein integriertes Promise-Objekt, das weitere Betriebsschnittstellen bereitstellt, z. B. Promise.all()
, das die Übergabe einer Reihe von Versprechen unterstützt und dann ausgeführt wird, wenn alle Versprechen abgeschlossen sind Eine benutzerfreundlichere und leistungsfähigere Ausnahmeerfassung sollte für die tägliche asynchrone Programmierung ausreichen.
Die meisten der heute beliebten JS-Bibliotheken implementieren Promise in unterschiedlichem Maße, wie z. B. Dojo, jQuery, Zepto, when.js, Q usw., aber sie werden nur offengelegt. Das meiste, was herauskommt, sind Deferred
-Objekte,
Wir sehen, dass die Verwendung von Promise, egal wie kompliziert die Promise-Implementierung ist, sehr einfach und der Code organisiert ist ist ganz klar. Von nun an besteht kein Grund mehr, mich mit Rückrufen zu quälen.
Endlich sind Versprechen so elegant! Aber Promise löst nur das Problem der tiefen Verschachtelung von Rückrufen. Was die asynchrone JavaScript-Programmierung wirklich vereinfacht, ist Generator. Auf der Seite von Node.js wird empfohlen, Generator in Betracht zu ziehen.
Empfohlenes Tutorial: „JS-Tutorial“
Das obige ist der detaillierte Inhalt vonErfahren Sie mehr über Promise in ES6. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!