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);
});
});
}
}
我正在使用 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
.
但是,在用户登录后,页面不显示前 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);
});
});
}
}