Was ist das HTTP-Versprechen-Objekt in AngularJS?

8

Obwohl ich mit dem HTTP-Versprechen-Objekt in AngularJS arbeite, habe ich kein klares Konzept, was ein HTTP-Versprechen-Objekt tatsächlich ist und was der Unterschied zwischen einem HTTP-Versprechen-Objekt und einem traditionellen Objekt in AngularJS ist! p>

Würde das jemand bitte erklären?

    
TanvirArjel 20.11.2016, 14:51
quelle

3 Antworten

8

Ein Versprechen ist ein Konzept für asynchrone Operationen. Grundsätzlich stellt es ein Objekt dar, das zu jedem Zeitpunkt von jetzt an in die Zukunft verfügbar sein kann.

Es hat drei Zustände:

  • Ausstehend
  • Erfüllt (erfolgreich abgeschlossen)
  • Abgelehnt (es ist fehlgeschlagen)

Sie behandeln die Zustände Ihres Versprechens mit zwei Methoden, then () und catch ().

then () liefert Ihnen das erwartete Objekt aus Ihrem asynchronen Aufruf, falls es erfolgreich ist, und catch () erlaubt Ihnen, den Fehler zu behandeln.

Ein Szenario, in dem Sie eine Promise verwenden können, ist beispielsweise, wenn Sie einen Netzwerkanruf tätigen:

%Vor%

Sie würden es dann so verwenden:

%Vor%

Hier finden Sie weitere Informationen zum Konzept: Ссылка

    
JCrook1121 20.11.2016, 14:56
quelle
3

Versprechen sind ein Konzept. Dies ist eine Frage zu AngularJS Promises, die ein wenig anders sind als andere Versprechen, aber das Konzept zwischen den Bibliotheken ist grundsätzlich das Gleiche.

Was sind asynchrone Prozesse?

Wenn Sie wissen, was das ist, überspringen Sie es und lesen Sie die nächste Überschrift, ansonsten:

Wenn Sie über Code verfügen, wird er normalerweise in der folgenden Reihenfolge ausgeführt:

%Vor%

Jeder Schritt wird nach dem vorherigen ausgeführt. Dies kann ein Problem sein, wenn diese for -Schleife eine lange Zeit braucht (stellen Sie sich vor, dass die HTTP-Anfrage sehr lange dauert). Die Anfrage würde einen ganzen Prozess aufhängen, bis die HTTP-Anfrage beendet ist. Sehr schlecht.

Node.js behandelt dies standardmäßig mit einem Callback-Muster . Wenn Sie eine Funktion aufrufen, die blockiert ist (dauert z. B. das Lesen einer Datei auf der Festplatte oder eine HTTP-Anfrage), registrieren Sie eine Callback-Funktion , nach der sie anrufen wird beenden. Es wird apply die Funktion mit den Daten von der Blockierungsfunktion wenn es fertig ist . Auf diese Weise können Sie anderen Code ausführen, während die blockierende Funktion beendet ist.

Wie viele Entwickler von Node.js Ihnen sagen werden, kann dieser Code sehr unordentlich und sehr schnell werden. Stattdessen wird AngularJS (und andere Bibliotheken) Ihnen ein Versprechen geben, wann der Code beendet wird. Es ermöglicht Ihnen, ein Promise-Muster zu verwenden.

Ich weiß, was asynchrones Zeug ist

Versprechen sind konzeptionell Callbacks ähnlich, aber viel sauberer und erlauben ein höheres Maß an Kontrolle. Bedenken Sie Folgendes:

%Vor%

Es ist nicht sehr intuitiv, dass die Funktion showTheUserWeAreLoading (manchmal) vor der HTTP-Anfrage passiert, wenn sie erfüllt ist . Dies lässt viel zu wünschen übrig, wenn Sie Ihren eigenen Code erneut lesen.

Derselbe Code, aber mit dem makeHttpRequest gibt ein Versprechen zurück:

%Vor%

Das Versprechen-Objekt hilft, den Status der Operation zu verfolgen. Sie weisen Handler zu, wenn die Vorgänge einen von zwei Status erreichen: Erfüllt oder Abgelehnt.

Es sollte angemerkt werden, dass makeHttpRequest ein Ersatz für $http() in AngularJS oder $.ajax in jQuery ist. Bevor der Standard für Versprechen im ECMAScript-Standard erstellt wurde , wurde jede Bibliothek ( und Bibliotheksversion) hatte eine eigene Meinung darüber, welches Muster Sie verwenden sollten / können. AngularJS hat zuvor das Namensschema .success(<function>).error(<function>) verwendet, während jQuery .done(<function>).fail(<function>) verwendet hat. Diese Benennungsschemata wurden vor sehr langer Zeit abgeschrieben, wodurch der aktuelle Unterschied zwischen Bibliotheken nicht mehr erkennbar ist (danke ECMAScript).

    
Kris Molinari 20.11.2016 15:36
quelle
1

Die API $http basiert auf den APIs für aufgeschobene / zugesagte APIs, die vom Dienst $q bereitgestellt werden.

1 .then(successCallback, [errorCallback], [notifyCallback])

2 .catch(errorCallback) – shorthand for promise.then(null, errorCallback)

3 .finally(callback, notifyCallback)

$q promise-Methode

    
范锦钢 20.11.2016 15:03
quelle