【发布时间】:2013-09-26 19:38:17
【问题描述】:
我正在尝试使用 foreach 中的顺序 http 请求更新进度条,这可行,但完成时它不是同步的,进度条正在通过 http 调用同步,我做错了什么?
angular.forEach(queue, function (item) {
if (item.uid) {
d.item = item;
$http({
url: BASE_URL + 'upp',
method: 'post',
data: d
}).then(function(res){
x++;
update_progress((x/queue_count)*100);
});
}
});
我想在 http 返回完成(200 OK)时调用 update_progress 函数,以便进度条正确显示实际进度。谢谢!
编辑:
在调用 *update_progress* 函数之前,我尝试检查响应状态,但它仍然无法按预期工作。我不知道在请求完成之前发送了 200 :|按逻辑,res obj 不应该是 http 请求的 response 吗?我的意思是,如果它是 200 而不是错误代码,那不应该意味着请求已完成?
angular.forEach(queue, function (item) {
if (item.uid) {
d.item = item;
$http({
url: BASE_URL + 'upp',
method: 'post',
data: d
}).then(function(res){
if(res.status == 200) {
x++;
update_progress((x/queue_count)*100);
}
});
}
阅读更多关于 promises atm 的内容,看看我是否可以按照@josh-strange 的说法让它工作
编辑 2:
因此,promise 是这样做的方式,所有请求都是按顺序发送的,因此进度条按预期工作,代码如下:
var promise = $q.all({});
// Had to init $q.all with an empty obj, 'cause null was trowing errors
angular.forEach(queue, function(item){
if (item.uid) {
promise = promise.then(function(){
d.item = item;
return $http({
url: BASE_URL + 'upp',
method: 'post',
data: d
}).then(function(res){
x++;
update_progress((x/queue_count)*100);
});
});
}
});
promise.then(function(){
end_js_update();
});
谢谢@josh-strange
【问题讨论】:
标签: twitter-bootstrap angularjs