angularjs中的http请求的无限循环

时间:2017-05-28 18:40:47

标签: javascript angularjs

我看到了其他有关此事的问题,但对我没有帮助。

我在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个请求的无限循环。当看到范围内的某个物体总是在变化时,我看到棱角可以做到这一点,但我在这里看不到这一点。

1 个答案:

答案 0 :(得分:4)

方法完全错了。

$http是异步的,retgetUser()

返回时始终为空

永远不要在视图中使用直接发出异步请求的函数。

相反,在控制器中(或更好地在服务中)迭代所有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>