Angularjs多个$ http.get请求

时间:2013-06-10 15:15:59

标签: http angularjs get

我需要做两个$ 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请求并像上面的实现一样将响应数据传递给服务?

提前致谢。

3 个答案:

答案 0 :(得分:71)

您需要的是$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]);
});

答案 1 :(得分:1)

有一种简单而苛刻的方式:在两个回调中调用计算。第一次调用(以先到者为准)看不完整的数据。它应该什么都不做,但快速退出。第二次调用会看到两个产品列表并完成工作。

答案 2 :(得分:0)

我最近也遇到了类似的问题,因此我还将发布答案:

在您的情况下,您只有两个计算,而且似乎这个数字是不可变的。

但是,这可能是一次触发两个或更多请求的情况。

因此,考虑到两种或多种情况,这就是我的实现方式:

for i, a in zip(indices, arrays):
    A[i, :len(a)] = a

在这种情况下,这将强制doCalculation改为接受数组。