Heim > Artikel > Web-Frontend > Promise-Objekt in Angular ($q-Einführung)_AngularJS
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.
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.
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