Interaktionen auf Webseiten werden immer komplexer und JavaScript verfügt über immer mehr asynchrone Vorgänge. Beispielsweise erfordern gängige Ajax-Anfragen eine Antwortoperation, wenn die Anfrage abgeschlossen ist. Während des Anfrageprozesses kann der Benutzer auch andere Vorgänge ausführen, ohne die Seite zu blockieren freundlich. Für Entwickler ist es jedoch sehr unfreundlich, solche Vorgänge in großen Mengen durchzuführen. Der durch die asynchrone Anforderung abgeschlossene Vorgang muss in der Rückruffunktion vordefiniert sein und diese Funktion muss aufgerufen werden, wenn die Anforderung abgeschlossen ist. Diese nichtlineare asynchrone Programmiermethode bereitet Entwicklern große Unannehmlichkeiten, bringt viele Unannehmlichkeiten mit sich, erhöht die Kopplung und Komplexität des Codes und die Organisation des Codes wird ebenfalls sehr unelegant sein, was die Effizienz des Codes erheblich verringert . Wartbarkeit. Die Situation ist komplizierter. Wenn ein Vorgang warten muss, bis mehrere asynchrone Ajax-Anfragen abgeschlossen sind, kommt es zu einer Verschachtelung der Rückruffunktion. Wenn Sie mehrere Ebenen verschachteln müssen, können Sie nur um Segen bitten.
Werfen wir einen Blick auf die folgende allgemeine asynchrone Funktion.
Wenn Sie der Funktion einen Rückruf hinzufügen möchten, tun Sie dies normalerweise.
Wenn Sie easy.js Promise verwenden, ist die Methode zum Hinzufügen von Rückrufen viel eleganter, vorausgesetzt, die ursprüngliche Funktion muss in eine Promise-Instanz gekapselt werden.
Der Code lautet wie folgt:
then akzeptiert zwei Funktionen als Parameter, die erste Funktion ist der abgeschlossene Rückruf und die zweite der fehlgeschlagene Rückruf.
Was passiert, wenn es mehrere oben erwähnte Ajax-Anfragen gibt? Dann müssen wir die when-Methode verwenden. Diese Methode kann mehrere Promise-Instanzen als Parameter akzeptieren.
requests.then(function( arg1, arg2 ){
console.log( 'success:' arg1[0] arg2[0] );
}, function( arg1, arg2 ){
console.log( 'failure:' arg1 arg2 );
});
Die when-Methode besteht darin, mehrere Promise-Instanzen in einem Array zu speichern und zu warten, bis alle Promise-Instanzen im Array abgeschlossen sind, bevor der abgeschlossene Rückruf ausgeführt wird. Sobald eine Instanz abgelehnt wird, wird sie sofort ausgeführt.
Promise-Muster ist eine der Spezifikationen von CommonJS. Viele gängige JavaScript-Bibliotheken verfügen über entsprechende Implementierungen, wie z. B. jQuery und Dojo, die diese Funktionen implementiert haben. Hier möchte ich mich immer noch über jQuerys Deferred beschweren. Unabhängig von seiner internen Verwendung sollte dieses Modul das Modul mit der niedrigsten Nutzungsrate durch Benutzer sein.