Angular: Rückgabe eines $ q.defer (). Versprechens anstelle eines $ http-Versprechens

8

Ich habe viele Egghead.io-Videos gesehen und dabei festgestellt, dass ein gebräuchliches Muster darin besteht, ein benutzerdefiniertes Versprechen zurückzugeben und es in den Rückrufen zu lösen.

%Vor%

Normalerweise würde ich das wie folgt schreiben:

%Vor%

Gibt es einen Vorteil, wenn Sie $q.defer() versprechen und nicht $http versprechen? Die Ansätze sehen für mich identisch aus.

    
diplosaurus 16.03.2015, 17:28
quelle

1 Antwort

3

Nein, keine Vorteile, es ist das gleiche. In Ihrem ersten Code haben Sie ein $ q.defer () Instanz, dann haben Sie ihre Methode resolve() aufgerufen, um ein gelöstes Versprechen zu erstellen.

Dies ist der Prozess, den Sie kennen müssen und den throw in angularJs übergeben müssen, wenn Sie mit asynchronen Funktionen und zukünftigen Objekten arbeiten, die unterschiedlich sein werden Werte oder neue Daten zu einem späteren Zeitpunkt, die Sie wissen müssen, wenn dies geschieht, da möglicherweise interessierte Parteien in Ihrer App nach dem Abschluss Zugriff auf das Ergebnis der verzögerten Aufgabe erhalten müssen

Wenn Sie jetzt mit $ http arbeiten, müssen Sie nichts davon tun weil es bereits ein aufgelöstes Versprechen zurückgibt, das Sie direkt aufrufen können, ist then () Methode, es sei denn, Sie haben eine andere Möglichkeit, Dinge zu tun, und Sie müssen einen anderen Ansatz implementieren.

Aber nicht alle angularJs-Dienste werden die Arbeit für Sie erledigen. Sehen Sie sich beispielsweise $resource an, die $http für die Verwendung in RESTful-Web-API-Szenarien enthält. $resource gibt kein gelöstes Versprechen zurück, ein Versprechen ja, du bekommst eins, aber du musst den letzten Schritt zur Auflösung machen (check diese Stapelfrage oder dies und vielleicht Dieser Artikel über Amber Kaplans eigene Erfahrung in der Arbeit mit Rest ).

Die Art und Weise, wie Sie es tun, ist also gut, so mache ich es auch, wenn ich mit $http arbeite, aber der erste Snippet-Code ist der, nach dem wir alle suchen werden, wenn wir es tun müssen Dinge anders mit $http oder zwingen andere Dienste zu ' arbeiten mit ' oder ' funktionieren wie ' AJAX.

    
Salem Ouerdani 06.08.2015, 16:14
quelle