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

Authorization interceptor with Infinity-scroll in AngularJS

我正在使用 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 重试请求时,它为两个查询($scope.module 参数)使用了增加 10 的偏移值。

函数 upload()uploadMore()angular-http-auth 之前有 2 次是 运行,所以我想这就是拦截器对两个查询使用更新参数的原因。

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

所以你可以解决这个问题阻止执行请求直到上一个完成。 更快的方法是:

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);
                 });                        
             });
            }
         }