javascript - angularjs中http请求的无限循环

标签 javascript angularjs

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

我在 angularjs Controller 中有函数:

$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 请求的无限循环。我看到当范围内的某些对象总是变化时, Angular 可以做到这一点,但我在这里没有看到这一点。

最佳答案

方法都是错误的。

$http 是异步的,从 getUser() 返回时 ret 始终为 null

切勿在 View 中使用直接发出异步请求的函数。

相反,在 Controller 中(或者更好的是在服务中)迭代所有 moves ,请求玩家数据,并将其添加为每个 moves 的属性

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>

关于javascript - angularjs中http请求的无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44230748/

相关文章:

javascript - 下拉值隐藏显示

javascript - 浏览器中永久全屏

javascript - 条件背景图像的 Angular Directive(指令)

javascript - 来自json对象的Angular.js格式日期

javascript - AngularJS:独立于 $routeProvider 的 Controller 出现 ReferenceError

javascript - 更改/注销 Handlebars 助手(Meteor)

javascript - 如何一次单独定位同一 <div> .class 的多个实例?

javascript - 在 Angular.js 中初始化 WOW.js

javascript - 如何将 babel 与我的常规 AngularJs 应用程序合并

javascript - 无需重新加载页面即可交换主题样式表的优雅方式