2013-06-10 15 views
30

Potrzebuję wykonać dwa wywołania http.get i muszę wysłać zwrócone dane odpowiedzi do mojej usługi, aby wykonać dalsze obliczenia.

chcę zrobić coś jak poniżej:

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 znaczników Wołam go jak

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

Jako $ http.get jest asynchroniczny, nie otrzymuję danych podczas przechodzenia w metodzie doCalculation.

Każdy pomysł, w jaki sposób mogę zaimplementować wiele żądań $ http.get i pracować jak wyżej, aby przekazać dane odpowiedzi do usługi?

Z góry dziękuję.

+0

Myślę, że można obiecywać obietnice – Ven

Odpowiedz

63

Potrzebne jest $q.all.

Dodaj $q do zależnościami kontrolera, a następnie spróbuj:

$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

Chciałem zagnieździć obietnice, ale twoje rozwiązanie jest o wiele lepsze. – callmekatootie

+1

@jaux console.log ($ scope.product_list_1) powinien zwrócić odpowiedź API poprawnie? Pierwsze "niezdefiniowane". jakaś wskazówka? – mushfiq

+0

@mushfiq Zaktualizowałem moją odpowiedź, spróbuj. –

1

Jest to prosta i hacky sposób: Zadzwoń do obliczenia zarówno wywołania zwrotne. Pierwsze wywołanie (w zależności od tego, co nastąpi wcześniej) zawiera niekompletne dane. Nie powinien nic robić, tylko szybko wyjść. Drugie wywołanie wyświetla listę produktów i wykonuje zadanie.

Powiązane problemy