有没有办法使用 Angular $http 和 $q 跟踪 http 请求的进度?我正在从 url 列表中进行 $http 调用,然后使用 $q.all 返回所有请求的结果。我想跟踪每个请求的进度(承诺已解决),以便我可以向用户显示一些进度。我正在考虑在承诺得到解决时发出事件,但我不确定应该在哪里。
var d = $q.defer();
var promises = [];
for(var i = 0; i < urls.length; i++){
var url = urls[i];
var p = $http.get(url, {responseType: "arraybuffer"});
promises.push(p);
}
$q.all(promises).then(function(result){
d.resolve(result);
}, function(rejection){
d.reject(rejection);
});
return d.promise;
编辑: 好的,经过一番摆弄,这就是我想出的
var d = $q.defer();
var promises = [];
var completedCount = 0;
for(var i = 0; i < urls.length; i++){
var url = urls[i];
var p = $http.get(url, {responseType: "arraybuffer"}).then(function(respose){
completedCount = completedCount+1;
var progress = Math.round((completedCount/urls.length)*100);
$rootScope.$broadcast('download.completed', {progress: progress});
return respose;
}, function(error){
return error;
});
promises.push(p);
}
$q.all(promises).then(function(result){
d.resolve(result);
}, function(rejection){
d.reject(rejection);
});
return d.promise;
不确定这是否是正确的做法。