我需要完整地执行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: 我不需要同时结束请求,我需要它们并行运行。
答案 0 :(得分:0)
我不需要同时结束请求,我需要它们并行运行。
这实际上是$q.all
所做的
将多个承诺合并为一个承诺,当解析输入承诺的全部时解析。
例如:
$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 ......)。