AngularJS-Funktion nach mehreren asynchronen Serviceaufrufen

8

Ich habe eine REST-API, die ich von einem AngularJS-Dienst wie folgt aufrufen möchte:

%Vor%

Dort werden andere Implementierungsdetails entfernt, z. B. die Authentifizierung, die nicht wichtig sind. Die API wird von einer Drittpartei bereitgestellt, sodass ich sie nicht ändern kann.

GET /api/resources gibt etwas wie folgt zurück:

%Vor%

GET /api/details/one gibt etwas wie folgt zurück:

%Vor%

Ich habe dann einen Controller, wo ich MyApi.resources() aufrufen möchte, warte auf die Ergebnisse und rufe dann für jedes Ergebnis MyApi.details(resource) auf. Wenn der letzte Aufruf von MyApi.details(resource) abgeschlossen ist, möchte ich eine Funktion ausführen, um einige Ergebnisse aus der Gruppe von Details zu aggregieren, aber ich kann nicht herausfinden, wie dies am Ende ausgelöst wird.

Mein Controller sieht momentan so aus:

%Vor%

Was ist der beste Weg, die Aggregation am Ende zu erreichen?

    
Adam Rodger 19.12.2014, 17:18
quelle

3 Antworten

13

Sie können die Funktion deferred $ q.all verwenden.

%Vor%     
Joe Samanek 19.12.2014, 17:36
quelle
1

Zwei Möglichkeiten:

  • $ q service

    Verwenden Sie $ q.all () zu UND alle Ihre Details verspricht

  • Versprechen Kette

    ruft die nächsten Details nur auf, wenn die vorherige aufgelöst ist

elaijuh 19.12.2014 17:36
quelle
1

Im ersten Schritt erstellen Sie ein Versprechen, verknüpfen alle Anfragen in der Schleife und geben es dann zurück. Dann können Sie .then verwenden, um den Code auszuführen, wenn er fertig ist.

%Vor%     
Kevin B 19.12.2014 17:25
quelle