programing

angularjs의 배수는 $http입니다.요구를 받다

css3 2023. 3. 11. 09:19

angularjs의 배수는 $http입니다.요구를 받다

두 개 해야 돼$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비동기이므로 전달 시 데이터가 수신되지 않습니다.doCalculation방법.

어떻게 하면 여러 개를 구현할 수 있는 방법$http.get위의 구현과 같이 응답 데이터를 모두 서비스로 전달하도록 요청하고 처리합니까?

필요한 건$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]);
});

간단하면서도 확실한 방법이 있습니다: 양쪽 콜백에서 계산을 호출합니다.첫 번째 호출(둘 중 첫 번째 호출)에는 불완전한 데이터가 표시됩니다.그것은 아무것도 하지 않고 빨리 빠져나가야 한다.두 번째 호출은 제품 목록을 모두 보고 작업을 수행합니다.

저도 최근에 비슷한 문제가 있어서 답변을 올리려고 합니다.

이 경우 계산은 두 개뿐이고 이 숫자는 변이할 수 없는 것으로 보입니다.

단, 이것은 동시에 2개 이상의 요청이 트리거되는 모든 경우에 해당됩니다.

따라서 2개 이상의 사례를 고려하여 다음과 같이 구현합니다.

var requests = [];
requests.push($http.get('FIRSTRESTURL', {'cache': false}));
requests.push($http.get('SECONDRESTURL', {'cache': false}));

$q.all(requests).then(function (responses) {
  var values = [];
  for (var x in responses) {
    responses[x].success(function(data){
      values.push(data);
    });
  }
  $scope.results = MyService.doCalculation(values);
});

이 경우 doCalculation이 어레이를 대신 받아들이도록 강제합니다.

언급URL : https://stackoverflow.com/questions/17027196/angularjs-multiple-http-get-request