AngularJS中的异步请求按顺序执行

时间:2014-04-11 05:50:39

标签: ajax angularjs

我需要完整地执行3个请求,这是代码:

for (var url in urls){
    console.log('queued!');
    $http.jsonp(url, {timeout: 10000}).then(function (response, status, headers, config) {
            if (response.data.status == 'success') {
                console.log(response.data);
            }
        }, function (data) {
            console.log(data);
        }
    );
}

然而,此请求按顺序执行(第二个请求大约需要8秒,但第三个请求大约需要1秒,第三个请求在第二个请求之后结束)

UPD: 我不需要同时结束请求,我需要它们并行运行。

1 个答案:

答案 0 :(得分:0)

  

我不需要同时结束请求,我需要它们并行运行。

这实际上是$q.all所做的

$ q.all([async1(),async2().....])

  

将多个承诺合并为一个承诺,当解析输入承诺的全部时解析。

例如:

 $q.all([
            serviceAPI.getCall_1(_date),
            serviceAPI.getCall_2(_date),
            serviceAPI.getCall_3(_date),            
            serviceAPI.getCall_4(_date),
            serviceAPI.getCall_5(_date)
            ])
            .then(function(result)
            {    
              /* here all above mentioned async calls finished */

              $scope.response_1 = result[0];
              $scope.response_2 = result[1];
              $scope.response_3 = result[2];
              $scope.response_4 = result[3];
              $scope.response_5 = result[4];
           });

首先,创建承诺列表(你可以使用循环for ),然后只写一个 resolve ,通过提供适当的方法轻松获取所有结果指数(1,2,3,4,5 ......)。