我需要填充进度条,我有一项服务给我当前进度。 我的想法是这样的:
$http.get('service').success(function(response, status, headers, config){
$scope.progress = response.progress;
$scope.progressL = response.progress+"%";
if(response.progress < 100){
//repeat
}
答案 0 :(得分:1)
只需将api调用放在一个函数中,让处理程序调用它:
function checkProgress(){
$http.get('service').success(function(response, status, headers, config){
$scope.progress = response.progress+"%";
if(response.progress < 100){
checkProgress();
}
}
}
尽管如此,你可能想以某种方式限制它。您可能还希望添加超时,以便在检查之间等待一段时间,这与$timeout(checkProgress, 5000)
一样。
为清晰起见编辑:这不会溢出你的筹码的原因是Angular的承诺$q
,$http.get('service')
返回的承诺是实现者,将异步触发。
所以在以下情况中:
$http.get('service').success(function(){ console.log('callback'); });
console.log('Returning');
return;
控制台会说&#34;返回&#34;之前&#34;回调&#34;每次。
如果保证分辨率是异步的,那你很好。以下是数千次解析异步的演示:http://jsfiddle.net/23Ldaj42/
如果不是这种情况(例如,如果$http
回调不能保证被称为异步),而是你想通过强制它如下所示来保护自己:
function checkProgress(){
$http.get('service').success(function(response, status, headers, config){
$scope.progress = response.progress+"%";
if(response.progress < 100){
$timeout(checkProgress); // This will perform async
}
}
}
答案 1 :(得分:1)
你可以递归地调用它:
var callback = function(response, status, headers, config){
$scope.progress = response.progress;
$scope.progressL = response.progress+"%";
if(response.progress < 100){
$http.get('service').success(callback);
}
};
$http.get('service').success(callback);