Bei der Verwendung von JQuery wusste ich, dass Versprechen ein Modus des asynchronen Programmiermodus von JS ist, aber ich habe den Unterschied zwischen IT und Jquerys aufgeschobenem Objekt nicht verstanden. Während das Projekt des Unternehmens fortschreitet, müssen wir Daten aus dem Backend erhalten, also haben wir beschlossen, dies zu erledigen.
Versprechen
Promise ist ein Modus, der asynchrone Ereignisse in Form von synchronen Operationen betreibt, die Schicht für Nistschicht vermeidet und asynchrone Ereignisse in Ketten bedienen kann.
Wir wissen, dass beim Schreiben von JavaScript asynchronem Code der Rückruf der einfachste Mechanismus ist. Wenn Sie diesen Mechanismus jedoch verwenden, müssen Sie den Steuerfluss, die Ausnahmebehandlung und die Funktionsemantik aus Außern und Funktionen opfern und sogar in eine Rückrufgrube geraten und dieses Problem versprechen.
In ES6, die eingebauten AngularJs eingebaute Q in Versprechen, AngularJs und wenn sie Versprechen/A-Spezifikationen verwenden, wie folgt:
Jede Aufgabe hat drei Staaten: Ausstehende, Erfüllung und Fehlgeschlagen.
1. Zustandszustand: Sie können in Erfüllungs- oder Ablehnungszustand übergehen.
2. Erfundener Zustand: Kann nicht in einen anderen Zustand geändert werden, und der Staat kann nicht geändert werden, und es muss einen Wertwert geben.
3. Staat: Er kann nicht in einen anderen Staat geändert werden, und der Staat kann nicht geändert werden, es muss einen Grund geben.
Die Staatsübertragung ist einmalig. Sobald der Staat erfüllt (abgeschlossen) oder fehlgeschlagen ist (fehlgeschlagen/abgelehnt), kann er sich nicht mehr ändern.
Die Codekopie lautet wie folgt:
Funktion oktogreet (Name) {
Rückgabename === 'Robin Hood';
}
Funktion asyncgreet (name) {
var deferred = $ q.Defer ();
setTimeout (function () {
// Da diese asynchrone Funktion fn in zukünftigen asynchronen FN ausgeführt wird
$ scope. $ bewerben (function () {
aufgeschoben.notify ('Begriff zu begrüßen' + name + '.');
if (oktogreet (name)) {
aufgeschoben.resolve ('Hallo,' + Name + '!');
} anders {
aufgeschoben.Reject ('Begrüßung' + Name + 'ist nicht erlaubt.');
}
});
}, 1000);
Rückgabe aufgeschoben.Promise;
}
var dadurch = asyncgreet ('Robin Hood');
danach (Funktion (Gruß) {
Alert ('Erfolg:' + Begrüßung);
}, Funktion (Grund) {
alert ('fehlgeschlagen:' + Grund);
}, function (update) {
ALERT ('Got Benachrichtigung:' + Update);
});
Grundlegende Nutzung von Q -Versprechen
Der obige Code zeigt die Rolle mehrerer Methoden der von $ q.Defer () erstellten Methoden der differenzierten Instanzen. Wenn die asynchrone Operation erfolgreich ist, wird der Zustand des Versprechensobjekts in "Erfolg" geändert (d. H. Von der Auszeit bis zur Auflösung); Wenn die asynchrone Operation fehlgeschlagen ist, wird der Zustand in "fehlgeschlagen" geändert (d. H. Von ausstehend bis abgelehnt). Schließlich können Sie aufgeschoben werden.
JS wird ein natives Versprechen haben, es gibt bereits vielversprechende Objekte in ES6, und die grundlegende Versprechen -API ist in Firefox- und Chrome 32 Beta -Versionen implementiert.
$ Q.Defferd in AngularJS
Geben Sie das differenzierte Objekt zurück, das als Ketten bezeichnet wird, indem Sie $ q.Defferd aufrufen. Dieses Objekt verbindet die drei Aufgabenzustände in den Versprechen/eine Spezifikation durch die API.
Deffered API
Methode des delativen Objekts
1.Resolve (Wert): Bei der Deklaration Resolve () zeigt es an, dass sich das Versprechenobjekt vom ausstehenden Status zur Lösung ändert.
2.Reject (Grund): Bei der Deklaration Resolve () zeigt es an, dass sich das Versprechenobjekt vom ausstehenden Zustand zu abgelehntem Zustand ändert.
3.Notify (Wert): Bei der Deklaration meldetify () zeigt dies an, dass der unerfüllte Zustand des Versprechensobjekts vor der Auflösung oder Ablehnung mehrfach aufgerufen werden kann.
deffelierte Objekteigenschaften
Versprechen: Das Letzte, was zurückgegeben wird, ist eine neue Eigenschaft für aufgeschobene Objekte, nicht das ursprüngliche aufgeschobene Objekt. Dieses neue Versprechungsobjekt kann nur den Status des ursprünglichen Versprechensobjekts beobachten und den internen Zustand des aufgeschobenen Objekts nicht ändern, wodurch verhindern kann, dass der Aufgabenzustand extern geändert wird.
Versprechen Sie API
Beim Erstellen einer aufgeschobenen Instanz wird ein neues Promise -Objekt erstellt und die Referenz kann durch aufgeschobene. Promise erhalten werden.
Der Zweck des Versprechensobjekts besteht darin, dem interessierten Teil seine Ausführungsergebnisse zu ermöglichen, wenn die aufgeschobene Aufgabe abgeschlossen ist.
Methoden von Versprechen Objekten
1.Wen (ERRAGEHANDLER, FISTEMEDHANTLER, ProgressHandler): Die damalige Methode wird verwendet, um auf verschiedene Zustände eines Versprechens zu hören. Der Fehlerhandler hört auf fehlgeschlagene Status, der FunnedHandler hört auf den erfüllten Zustand zu, und der ProgressHandler hört auf unerfüllten Zustand. Darüber hinaus kann der Benachrichtigungsrückruf mehrmals mit 0 bis mehrmals aufgerufen werden, was vor der Auflösung oder Ablehnung (Lösung und Ablehnung) eine Fortschrittsanzeige liefert.
2.Catch (Fehlercallback) - Verknüpfung zu Versprechen.Then (NULL, ERRORCALLBACK)
3.. Schließlich (Rückruf) - Ermöglichen Sie zu beobachten, ob ein Versprechen ausgeführt oder abgelehnt wird, aber Sie müssen den letzten Wert nicht ändern. Dies kann verwendet werden, um Ressourcen zu freien oder nutzlose Objekte zu bereinigen, unabhängig davon, ob das Versprechen abgelehnt oder gelöst wird. Weitere Informationen finden Sie in der vollständigen Dokumentationsspezifikation.
Versprechenkettenaufruf können über die dann () Methode () implementiert werden.
Die Codekopie lautet wie folgt:
PromiseB = promisea.then (Funktion (Ergebnis) {
Rückgabeergebnis + 1;
});
// PromiseB wird unmittelbar nach der Verarbeitung von Promisea verarbeitet.
// und sein Wertwert ist das Ergebnis der zunehmenden zunehmenden Promisea um 1
Andere Methoden von $ Q.
$ Q.Wenn (Wert): Übergeben Sie den variablen Wert, versprachen. Dann () führt ein erfolgreicher Rückruf aus
$ Q.All (Versprechen): Mehrere Versprechen müssen erfolgreich ausgeführt werden, bevor sie erfolgreich ausgeführt werden können. Der Wert wird als Array- oder Hash -Wert übergeben. Jeder Wert im Array ist das Versprechungsobjekt, das dem Index entspricht.