2013-08-05 35 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

Bạn có thể muốn xem ['$ q.all'] (http://docs.angularjs.org/api/ng.$q) và [' $ q.when'] (http://docs.angularjs.org/api/ng.$q). –

Trả lời

25

Vâng, bạn có thể chạy chúng song song bằng cách sử dụng $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

Hoạt động như một sự quyến rũ. Lưu ý rằng res chứa một đối tượng 'data' khác nên tôi đã chỉnh sửa nó. – Guy

0

Hoặc:

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

mà làm cho cả hai $http yêu cầu cùng một lúc, và sau đó chạy mã khối (console.log... etc) sau khi cả hai lời hứa $http đã được hoàn thành.

+0

Bạn có chắc nó sẽ hoạt động không? Điều gì sẽ xảy ra nếu ngôn ngữPromise được hoàn tất trước ngôn ngữTốc độ? – Guy

+1

"... bất kể khi nào lời hứa hoặc sẽ được giải quyết hoặc bị từ chối,' sau đó sẽ gọi một trong các cuộc gọi lại thành công hoặc lỗi không đồng bộ ngay khi kết quả có sẵn "tài liệu hình thái trên' sau đó'. ... Tôi nghĩ rằng 'thành công 'chỉ là đường cho' then' vì vậy nếu languagePromise được giải quyết trước, nó vẫn sẽ không được gọi cho đến khi menuPromise đã được giải quyết – Brendan

Các vấn đề liên quan