2013-06-10 14 views
30

Devo eseguire due chiamate $ http.get e devo inviare i dati di risposta restituiti al mio servizio per fare ulteriori calcoli.

voglio fare qualcosa di simile di seguito:

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); 
     } 
    } 

Nel mio markup che chiamo piace

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

da $ http.get è asincrona, io non sono sempre i dati quando si passa nel metodo doCalculation.

Qualche idea come posso implementare più richieste $ http.get e lavorare come sopra l'implementazione per passare entrambi i dati di risposta in servizio?

Grazie in anticipo.

+0

Penso che si possano promettere a catena – Ven

risposta

63

Quello che ti serve è $q.all.

Aggiungi $q dipendenze del controller, quindi provare:

$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

Stavo cercando di annidare le promesse ma la tua soluzione è molto meglio. – callmekatootie

+1

@jaux console.log ($ scope.product_list_1) dovrebbe restituire correttamente la risposta dell'API? Ottenere "undefined". qualche indizio? – mushfiq

+0

@mushfiq Ho aggiornato la mia risposta, provatelo. –

1

C'è un modo semplice e hacky: Chiamare il calcolo in entrambi i callback. La prima invocazione (quella che viene prima) vede i dati incompleti. Non dovrebbe fare nulla, ma uscire rapidamente. La seconda chiamata vede entrambe le liste di prodotti e fa il lavoro.

Problemi correlati