angularjs中的http请求无限循环
问题描述:
我看到有关此问题的其他问题,但没有帮助我。angularjs中的http请求无限循环
我有功能angularjs控制器:
$scope.getUser = function(id){
ret = null;
$http.get('services/rest/users/' + id).then(
function(response){
ret = response.data.name;
},
function(response){
}
)
return ret;
}
我调用该函数在HTML:
<div ng-repeat = "move in moves">Player:<span> {{getUser(move.player_id)}} </span> - {{move.guess}} - {{move.answer}}</div>
,这将创建'services/rest/users/' + id
请求的无限循环。我看到角度可以做到这一点,当范围内的某个对象总是在变化,但我没有看到这里。
答
方法是错误的。
$http
是异步的,从getUser()
返回切勿认为直接进行异步请求使用功能时ret
永远是零。
相反,在控制器(或服务更好的)遍历所有的moves
,要求玩家数据,并补充说,因为每个move
function getUser(id) {
return $http.get('services/rest/users/' + id).then(function(response) {
return response.data.name;
}).catch(function() {
return 'Unknown Player';
})
}
angular.forEach($scope.moves, function(move){
getUser(move.player_id).then(function(player){
move.player = player;
});
});
查看物业:
<div ng-repeat = "move in moves">Player:<span> {{move.player)}} </span>...</div>
是不是它是由于摘要循环一次又一次地被调用,只要你的一个请求(后端)正在完成?这可以再次调用ng-repeat指令。 –
首先,使用$ q获取用户的承诺,并解决是否响应或拒绝,如果错误。其次,在ng-repeat中调用多个http请求是一种不好的做法。如果可以,并且数据准备就绪时,请将数据带入一个请求中,填充绑定到移动范围变量的数组。 –
即使没有'ng-repeat',它也会循环。我从另一个地方调用了该函数,并且它又开始循环。将尝试'$ q'。 – wdc