Heim  >  Artikel  >  Web-Frontend  >  Promise-Objekt in Angular ($q-Einführung)_AngularJS

Promise-Objekt in Angular ($q-Einführung)_AngularJS

WBOY
WBOYOriginal
2016-05-16 16:11:351524Durchsuche

Als ich JQuery verwendete, wusste ich, dass Promise ein asynchrones JS-Programmiermodell ist, aber ich verstand den Unterschied zwischen ihm und dem verzögerten Objekt von JQuery nicht ganz. Da das Projekt des Unternehmens voranschritt, mussten wir Daten vom Backend erhalten, also beschlossen wir, dies zu erledigen.

Versprechen

Promise ist ein Modus, der asynchrone Ereignisse in Form eines synchronen Operationsprozesses ausführt, Verschachtelungsebenen vermeidet und asynchrone Ereignisse in einer Kette ausführen kann.

Wir wissen, dass beim Schreiben von asynchronem JavaScript-Code Rückrufe der einfachste Mechanismus sind. Die Verwendung dieses Mechanismus muss jedoch den Kontrollfluss, die Ausnahmebehandlung und die Funktionssemantik beeinträchtigen und kann sogar dazu führen, dass wir in die Rückruffalle tappen Versprechen löst dieses Problem.

Promise in ES6, AngularJS integriert Q in AngularJS und übernimmt die Promises/A-Spezifikation wie folgt:

Jede Aufgabe hat drei Status: ausstehend, erfüllt und abgelehnt.

1. Status „Ausstehend“: Kann in den Status „Erfüllung“ oder „Ablehnung“ übergehen.
2. Erfüllter Zustand: Er kann nicht in einen anderen Zustand geändert werden, und der Zustand kann nicht geändert werden. Er muss einen Wert haben.
3. Abgelehnter Status: Es kann nicht in einen anderen Status geändert werden, und der Status kann nicht geändert werden. Es muss einen Grund geben.

Die Statusübertragung erfolgt einmalig. Sobald der Status erfüllt (abgeschlossen) oder fehlgeschlagen (fehlgeschlagen/abgelehnt) ist, kann er nicht mehr geändert werden.

Code kopieren Der Code 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 Zukunft asynchron ausgeführt wird, packen wir den Code in den $apply-Aufruf ein und beobachten dabei die Modelländerungen korrekt
$scope.$apply(function() {
              deferred.notify('Über die Begrüßung ' Name '.');

                 if (okToGreet(name)) {
                   deferred.resolve('Hallo, ' name '!');
              } sonst {
                    deferred.reject('Begrüßung ' Name ' ist nicht zulässig.');
            }
        });
}, 1000);

Rückgabe deferred.promise;
}

var Promise = asyncGreet('Robin Hood');
Promise.then(function(greeting) {
Alert('Erfolg: ' Begrüßung);
}, Funktion(Grund) {
alarm('Fehlgeschlagen: ' Grund);
}, Funktion(aktualisieren) {
Alert('Benachrichtigung erhalten: ' Update);
});

Grundlegende Verwendung von Q Promise

Der obige Code zeigt die Rolle mehrerer Methoden der von $q.defer() erstellten verzögerten Instanz. Wenn der asynchrone Vorgang erfolgreich ist, verwenden Sie die Auflösungsmethode, um den Status des Promise-Objekts in „Erfolg“ zu ändern (d. h. von ausstehend in gelöst). Wenn der asynchrone Vorgang fehlschlägt, ändern Sie den Status mit der Ablehnungsmethode in „fehlgeschlagen“. (d. h. von „Ausstehend“ zu „Abgelehnt“). Schließlich wird deferred.promise zurückgegeben und wir können die then-Methode in einer Kette aufrufen.

JS verfügt über natives Promise, ES6 verfügt bereits über Promise-Objekte, Firefox und Chrome 32 Betaversionen haben die grundlegende Promise-API implementiert

$q.defferd in AngularJs

Rufen Sie $q.defferd auf, um das verzögerte Objekt an Kettenaufrufe zurückzugeben. Dieses Objekt verknüpft die drei Aufgabenzustände in der Promises/A-Spezifikation über die API.

verzögerte API

Methoden verzögerter Objekte

1.resolve(value): Bei der Deklaration von „resolve()“ wird angezeigt, dass das Promise-Objekt vom Status „Ausstehend“ in den Status „Aufgelöst“ wechselt.
2.reject(reason): Bei der Deklaration von „resolve()“ wird angezeigt, dass das Versprechenobjekt vom Status „Ausstehend“ in den Status „Abgelehnt“ wechselt.
3.notify(value): Wenn notify() deklariert wird, zeigt es den nicht erfüllten Status des Promise-Objekts an und kann vor der Auflösung oder Ablehnung mehrmals aufgerufen werden.

Zurückgestellte Objekteigenschaften

Versprechen: Was letztendlich zurückgegeben wird, ist ein neues Versprechensattribut für verzögerte Objekte, nicht das ursprüngliche verzögerte Objekt. Dieses neue Promise-Objekt kann nur den Status des ursprünglichen Promise-Objekts beobachten und den internen Status des verzögerten Objekts nicht ändern, um zu verhindern, dass der Aufgabenstatus extern geändert wird.

Promise API

Wenn eine verzögerte Instanz erstellt wird, wird ein neues Versprechenobjekt erstellt und die Referenz kann über deferred.promise abgerufen werden.

Der Zweck des Versprechensobjekts besteht darin, dem interessierten Teil zu ermöglichen, seine Ausführungsergebnisse zu erhalten, wenn die verzögerte Aufgabe abgeschlossen ist.

Promise-Objektmethoden

1.then(errorHandler, erfülltHandler, progressHandler): Die then-Methode wird verwendet, um die verschiedenen Zustände eines Versprechens zu überwachen. Der errorHandler überwacht den Status „fehlgeschlagen“, der „filledHandler“ überwacht den Status „erfüllt“ und der progressHandler überwacht den Status „unerfüllt“ (unvollständig). Darüber hinaus kann der Benachrichtigungsrückruf null oder mehrmals aufgerufen werden, um vor der Lösung oder Ablehnung (Auflösen und Ablehnen) einen Hinweis auf den Fortschritt zu geben.
2.catch(errorCallback) – Verknüpfung für Promise.then(null, errorCallback)
3.finally(callback) – ermöglicht Ihnen zu beobachten, ob ein Versprechen ausgeführt oder abgelehnt wird, jedoch ohne den Endwert zu ändern. Dies kann verwendet werden, um Ressourcen freizugeben oder ungenutzte Objekte zu bereinigen, unabhängig davon, ob das Versprechen abgelehnt oder gelöst wird. Weitere Informationen finden Sie in der vollständigen Dokumentationsspezifikation.

Versprechenskettenaufrufe können über die Methode then() implementiert werden.

Code kopieren Der Code lautet wie folgt:

PromiseB = PromiseA.then(function(result) {
Rückgabeergebnis 1;
});

// PromiseB wird sofort nach der Verarbeitung von PromiseA verarbeitet,
// Und sein Wertwert ist das Ergebnis von PromiseA erhöht um 1

Andere Methoden von $q

$q.when(value): Übergeben Sie den Variablenwert, Promise.then() führt einen erfolgreichen Rückruf aus
$q.all(promises): Mehrere Versprechen müssen erfolgreich ausgeführt werden, bevor der Erfolgsrückruf ausgeführt werden kann. Der übergebene Wert ist ein Array oder Hashwert. Jeder Wert im Array ist ein Versprechensobjekt, das dem Index entspricht

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn