2013-06-10 12 views
30

मुझे दो $ http.get कॉल करने की आवश्यकता है और मुझे आगे की गणना करने के लिए मेरी सेवा में लौटा प्रतिक्रिया डेटा भेजने की आवश्यकता है।

मैं नीचे की तरह कुछ करना चाहता हूँ:

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

मेरे मार्कअप में मैं इसे पसंद

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

$ के रूप में http.get अतुल्यकालिक है बोल रहा हूँ, मैं डेटा जब गुजर नहीं मिल रहा है डक्यूलेशन विधि में।

कोई विचार मैं कई $ http.get अनुरोध को कैसे कार्यान्वित कर सकता हूं और सेवा में प्रतिक्रिया डेटा दोनों को पारित करने के लिए उपर्युक्त कार्यान्वयन की तरह काम कर सकता हूं?

अग्रिम धन्यवाद।

+0

मुझे लगता है कि आप चेन वादा कर सकते हैं – Ven

उत्तर

63

आपको क्या चाहिए $q.all

नियंत्रक के निर्भरता को $q जोड़ें, फिर प्रयास करें:

$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

मैं वादे को घोंसले के लिए जा रहा था लेकिन आपका समाधान बहुत बेहतर है। – callmekatootie

+1

@jaux console.log ($ scope.product_list_1) को एपीआई प्रतिक्रिया सही वापस करनी चाहिए? "अपरिभाषित" प्राप्त करना। कोई सुराग? – mushfiq

+0

@mushfiq मैंने अपना जवाब अपडेट कर दिया है, इसे आज़माएं। –

1

एक सरल और hacky तरीका उपलब्ध नहीं है: दोनों कॉलबैक में गणना पर कॉल करें। पहला आविष्कार (जो भी पहले आता है) अपूर्ण डेटा देखता है। इसे जल्दी से बाहर निकलने के अलावा कुछ भी नहीं करना चाहिए। दूसरा आविष्कार उत्पाद सूची दोनों को देखता है और नौकरी करता है।

संबंधित मुद्दे