2013-06-10 14 views
30

Ich muss zwei $ http.get Anruf tun, und ich muss zurückgegebene Antwortdaten an meinen Dienst für weitere Berechnungen zu senden.

Ich möchte wie unten etwas tun:

function productCalculationCtrl($scope, $http, MyService){ 
    $scope.calculate = function(query){ 

      $http.get('FIRSTRESTURL', {cache: false}).success(function(data){ 
       $scope.product_list_1 = data; 
      }); 

      $http.get('SECONDRESTURL', {'cache': false}).success(function(data){ 
       $scope.product_list_2 = data; 
      }); 
      $scope.results = MyService.doCalculation($scope.product_list_1, $scope.product_list_2); 
     } 
    } 

In My Markup ich es nenne, wie

<button class="btn" ng-click="calculate(query)">Calculate</button> 

wie $ http.get asynchron ist, ich bin nicht die Daten immer beim Passieren in der Berechnungsmethode.

Jede Idee, wie kann ich mehrere $ http.get Anfrage implementieren und funktionieren wie oben Implementierung, um beide Antwortdaten in Dienst zu übergeben?

Vielen Dank im Voraus.

+0

Ich denke, Sie können Versprechen Versprechen – Ven

Antwort

63

Was Sie brauchen, ist $q.all.

hinzufügen $q zu Abhängigkeiten des Controllers, dann versuchen:

$scope.product_list_1 = $http.get('FIRSTRESTURL', {cache: false}); 
$scope.product_list_2 = $http.get('SECONDRESTURL', {'cache': false}); 

$q.all([$scope.product_list_1, $scope.product_list_2]).then(function(values) { 
    $scope.results = MyService.doCalculation(values[0], values[1]); 
}); 
+0

Ich war für die Verschachtelung der Versprechen, aber Ihre Lösung ist viel besser. – callmekatootie

+1

@jaux console.log ($ scope.product_list_1) sollte die API-Antwort richtig zurückgeben "undefined". irgendeine Ahnung? – mushfiq

+0

@mushfiq Ich habe meine Antwort aktualisiert, probieren Sie es aus. –

1

Es gibt eine einfache und Hacky Art und Weise: die Berechnung in beiden Rückrufe aufrufen. Der erste Aufruf (je nachdem, was zuerst eintritt) sieht unvollständige Daten. Es sollte nichts anderes tun, als schnell zu beenden. Der zweite Aufruf sieht beide Produktlisten und erledigt den Job.

Verwandte Themen