有沒有方法跟蹤使用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;
編輯: OK,有點擺弄之後,這是我想出
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;
不知道這是做的正確的方式。
我認爲這是正確的方式 –