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

Ajax AngularJS中的异步请求按顺序执行,ajax,angularjs,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.

我需要同时执行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: 我不需要请求同时结束,我需要它们并行运行

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

这实际上就是
$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];
           });

首先,创建承诺列表(可以对使用循环
),然后只编写一个解析,通过提供适当的索引(1,2,3,4,5…)可以轻松获取所有结果。

第一个解决方案根本不是并发的,它会等待上一个请求启动下一个请求。我认为第二种解决方案与我的类似,只是收集请求结果。我不需要它,所有必要的逻辑都在“then”回调中实现。@Сццццццццццццц。如果在
和{}
中输入断点,则在所有调用完成时输入断点。所以我想这就是你想要的