我使用以下代码从后端获取一些信息:
angular.forEach(authors, function(author){ var authorId = author.id; var url = contextPath + '/book/list/' + authorId; $http({ method: 'GET', url: url }) .then(function(response){ author.books = response.data; }) });
我想逐个触发ajax调用,而不是同时触发,这意味着每个ajax调用都会等待前一个调用完成。有人知道我的代码会有什么变化吗?
答案 0 :(得分:0)
是的,您可以在角度中使用 $ timeout 服务按顺序拨打电话,如下所示
angular.forEach(authors, function(author){
var authorId = author.id;
var url = contextPath + '/book/list/' + authorId;
$timeout(function(){
$http({
method: 'GET',
url: url
})
.then(function(response){
author.books = response.data;
})
})},2000);//2000-> milliseconds;
这会每2秒发出 GET 请求。如果您知道您的呼叫将需要更多时间根据需要设置超时值。
答案 1 :(得分:-1)
查看$q.all()
将多个promises组合成一个promise,当所有输入promise都被解析时解析。
编辑: 哎呀,没读完。 $ q.all()等待所有承诺解决,你需要将它们链接起来,以便在一个承诺解决后再调用另一个:
somepromise
.then(function(response){
return $http({method:"some method",url:"some urlj",data:response});
}).then(function(response2){
//chain third and so on
})
基本上你需要返回承诺才能链接它们