AngularJS中的无限滚动授权拦截器

时间:2015-11-03 16:33:28

标签: javascript angularjs infinite-scroll

我正在使用angular-http-auth拦截401响应以显示登录对话,并在用户获得授权时重试失败的请求。

由于我正在使用infinity-scroll我正在增加一个偏移值,每增加一次上传:

var upload = function () {
                 dataResource.query($scope.model).then(function (result) {
                     angular.forEach(result.items, function (value) {                            
                         $scope.items.push(value);
                     });                        
                 });
             }

$scope.uploadMore = function () {                    
                        $scope.model.Offset = $scope.model.Offset + 10;
                        upload();                                            
                    }; 
upload();

当我的页面加载时,它立即向服务器upload()发送2个请求,从该指令调用,并通过infinity-scroll发送uploadMore()。

但是,在用户登录后,页面不显示前10个条目,而是连续2次显示11-20个项目

当我尝试调试它时,我注意到当angular-http-auth重试请求时,它使用两个查询增加了10个Offset值($scope.module参数)。

函数upload()uploadMore()angular-http-auth之前运行了2次,所以我猜这就是为什么拦截器为这两个查询使用更新的参数。

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

因此,您可以解决此问题,防止执行请求,直到上一个完成。 更快的方法是:

var pending = false;
var upload = function () {
            if(!pending) {
             pending = true;
             dataResource.query($scope.model).then(function (result) {
                 pending = false;
                 angular.forEach(result.items, function (value) {                            
                     $scope.items.push(value);
                 });                        
             });
            }
         }