Lassen Sie uns darüber sprechen, was Versprechen ist und was $ Q zuerst ist. Promise ist ein asynchroner Verarbeitungsmodus mit vielen Implementierungsmethoden, wie dem berühmten Q und Jquery's Deffered.
Was ist vielversprechend
Diejenigen, die zuvor von Ajax gelernt haben, können den Schmerz von Rückernständen erleben. Synchroner Code ist leicht zu debuggen, aber asynchroner Rückrufcode wird den Entwicklern in einen Sumpf fallen und kann nicht verfolgt werden, wie z. B.:
funa (arg1, arg2, function () {funcb (arg1, arg2, function () {funcc (arg1, arg2, function () {xxxx ......})})})})Das Nesteln selbst ist bereits schwer zu verstehen, und außerdem wird der Rückruf in einer unbekannten Zeit ausgelöst, was einer Verletzung der Verletzung entspricht.
Mit der Versprechenspezifikation kann es den Entwicklern jedoch helfen, asynchroner Code auf synchrone Weise zu schreiben, wie beispielsweise in AngularJs:
deferabc.resolve (xxx)
.then (funcSuccess () {}, funcerror () {}, funcnotify () {});
Wenn das Objekt in Auflösung erfolgreich ausgeführt wird, wird Funcsuccess ausgelöst, und wenn es fehlschlägt, wird Funcerror ausgelöst. Ein bisschen ähnlich
deferabc.resolve (function () {sunccess: funcsuccess, fehler: funcerror, benachrichtigen: funcnotify})Um es unverblümt auszudrücken, Versprechen ist eine Vordefinition unsicherer Ausführungsergebnisse. Wenn es erfolgreich ist, ist es xxxx; Wenn es fehlschlägt, ist es XXXX, genau wie im Voraus einige Versprechen.
Zum Beispiel war Xiaobai sehr faul, als er in der Schule war. Er bat seinen Mitbewohner immer, Essen mitzubringen, und sagte ihm im Voraus, dass er dieses Gemüse kaufen würde, sonst würde er gebratene Eier mit Tomaten kaufen; Egal ob er sie kaufen könnte, er sollte sich daran erinnern, eine Packung Zigaretten mitzubringen.
Xiaobai bat seinen Mitbewohner, Mahlzeiten mitzubringen ()
. Dann (Laucheier, Rührei mit Tomaten)
FINAL (mit einer Packung Zigaretten)
$ Q Service
Der Q -Dienst ist eine für sich selbst im AngularJS implementierte Versprechen -Implementierung, die viel leichter ist als Kris Kwals Q.
Lassen Sie mich zunächst mehrere häufig verwendete Methoden von $ F vorstellen:
Defer () erstellt ein aufgeschobenes Objekt, das mehrere häufig verwendete Methoden ausführen kann, z. B. Auflösung, Ablehnung, Benachrichtigung usw.
Alle () sind in der Reihe von Versprechen übergeht, in Chargen ausgeführt und gibt ein Versprechensobjekt zurück
Wenn () in einem unsicheren Parameter übergeht, gibt es ein Versprechensobjekt zurück.
In Versprechen sind drei Staaten definiert: Wartezustand, Abschlussstaat und Ablehnungsstatus.
Es gibt mehrere Vorschriften bezüglich des Status:
1 Änderungen im Staat sind irreversibel
2 Der Wartezustand kann vollständig oder abgelehnt werden
Defer () Methode
In $ Q können Sie die Auflösungsmethode verwenden, um der Abschlusszustand zu werden. Verwenden Sie die Ablehnungsmethode, um der Ablehnungszustand zu werden.
Werfen wir einen Blick auf die einfache Verwendung von $ F:
<html ng-App = "MyApp"> <head> <meta http-equiv = "content-type" content = "text/html; charset = utf-8"/> <script src = "http://apps.bdimg.com/libs/angular.js/.2.16/angular ng-controller = "myctrl"> {{{test}} </div> <script type = "text/javaScript"> var myappmodule = angular.module ("myApp", []); MyAppmodule.Controller ("myctrl", ["$ scope", "$ q", function ($ scope, $ q) {$ scope.test = 1; // Dies wird nur verwendet, um zu testen, ob AngularJS normal ist, und no andere Funktion var defer1 = $ q.defer (); Promise1 --- Erfolg "); console.log (value);}, Funktion (Wert) {console.log (" in Promise1 --- Fehler "); Konsole.log (Wert);}, Funktion (Wert) {Konsole.log (" In Promise1 --- Fehler "); console.log (Wert); console.log (value); console.log (Wert); </script> </body> </html>Wenn Defer () verwendet wird, um ein aufgeschobenes Objekt zu erstellen, wird Defer.Promise verwendet, um ein Versprechensobjekt zurückzugeben, um die damalige Methode zu definieren. Dann gibt es drei Parameter, nämlich erfolgreiche Rückrufe, fehlgeschlagene Rückrufe und staatliche Änderungsrückrufe.
Die in Auflösung übergebene Variable oder Funktion gibt das Ergebnis zurück und wird als Parameter der ersten dann dann Methode angesehen. Dann gibt die Methode ein Versprechensobjekt zurück, sodass es geschrieben werden kann als
xxxx
. Dann (a, b, c)
. Dann (a, b, c)
. Dann (a, b, c)
.fangen()
.Endlich()
Lassen Sie uns weiter über den obigen Code sprechen, dann ... fangen ... denken wir endlich als den Versuch vor ... Fang ... endlich in Java.
All () Methode
Diese alles () -Methode kann mehrere Primisen zu einem kombinieren. Wenn alle Versprechen erfolgreich ausgeführt werden, wird der anschließende Rückruf ausgeführt. Die Parameter im Rückruf sind das Ergebnis jeder Versprechenausführung.
Diese Methode kann verwendet werden, wenn einige Methoden in Chargen ausgeführt werden.
var funca = function () {console.log ("funca"); kehre "Hallo, funa" zurück; } var funcb = function () {console.log ("funcb"); Rückkehr "Hallo, Funk"; } $ Q.All ([funca (), funcb ()]) .then (function (result) {console.log (result);});Ergebnisse der Ausführung:
funca
funcb
Array ["Hallo, Funa", "Hallo, FunB"]
Wenn () Methode
Wenn die Methode ein Parameter übergeben werden kann, der ein Wert sein kann und ein externes Objekt sein kann, das dem Versprechen -Standard entspricht.
var funca = function () {console.log ("funca"); kehre "Hallo, funa" zurück; } $ q.when (funca ()) .then (function (result) {console.log (result);});Diese Methode kann verwendet werden, wenn die bestandenen Parameter ungewiss sind.
Hallo Funa
Das obige ist eine detaillierte Einführung in die Informationen über das Versprechen-$ Q Service in AngularJs. Wir werden in Zukunft weiterhin relevante Informationen hinzufügen. Vielen Dank für Ihre Unterstützung für diese Seite!