2013-08-05 10 views
10
$http.get('/services/menu').success(function (dataMenu) { 
    $http.get('/services/language').success(function (dataLanguage) { 
      console.log('dataLanguage', dataLanguage); 
      $scope.menuRoot = dataMenu.result.items; 
      $scope.menuItems = dataMenu.result.items; 
      $scope.languageRoot = dataLanguage.result; 
      $scope.currentMenuItem = null; 
      $scope.refreshExperiments(); 
      $scope.mergeLanguage(); 
    }); 
}); 
+2

Możesz chcieć rzucić okiem na ['$ q.all'] (http://docs.angularjs.org/api/ng.$q) i [' $ q.when'] (http://docs.angularjs.org/api/ng.$q). –

Odpowiedz

25

Tak, można uruchomić je równolegle za pomocą $q.all:

$q.all([$http.get('/services/menu'), $http.get('/services/language')]) 
    .then(function (res) { 
     var dataMenu = res[0].data.result.items; 
     console.log('dataLanguage', res[1].data); 
     $scope.menuRoot = dataMenu; 
     $scope.menuItems = dataMenu; 
     $scope.languageRoot = res[1].data.result; 
     $scope.currentMenuItem = null; 
     $scope.refreshExperiments(); 
     $scope.mergeLanguage(); 
}); 
+0

Działa jak urok. Zwróć uwagę, że res zawiera kolejny obiekt "danych", więc go zredagowałem. – Guy

0

Alternatywnie:

var menuPromise = $http.get('/services/menu'); 
var languagePromise = $http.get('/services/language'); 

menuPromise.success(function(dataMenu) { 
    languagePromise.success(function(dataLanguage) { 
     console.log('dataLanguage', dataLanguage); 
     $scope.menuRoot = dataMenu.result.items; 
     $scope.menuItems = dataMenu.result.items; 
     $scope.languageRoot = dataLanguage.result; 
     $scope.currentMenuItem = null; 
     $scope.refreshExperiments(); 
     $scope.mergeLanguage(); 
    }); 
}); 

co sprawia, że ​​oba $http żądań w tym samym czasie, a następnie uruchamia kod blok (console.log... etc) po spełnieniu obu obietnic $http.

+0

Jesteś pewien, że to zadziała? Co się stanie, jeśli językPromise zostanie zakończony przed wersją languagePromise? – Guy

+1

"... niezależnie od tego, kiedy obietnica została lub zostanie rozwiązana lub odrzucona," następnie "asynchronicznie wywołuje jedno z wezwań dotyczących sukcesu lub błędów, gdy tylko wynik jest dostępny" -wymiarowe dokumenty na 'then'. ... Myślę, że 'success' to po prostu cukier dla' then', więc jeśli najpierw zostanie rozstrzygnięta opcja languagePromise, to nadal nie zostanie wywołana, dopóki nie zostanie rozwiązana opcja menuPromise – Brendan

Powiązane problemy