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;
それが正しい方法であるかどうかはわかりません。