2015-11-03 113 views
1

我使用angular-http-auth來攔截401響應,以顯示登錄對話框,並在用戶被授權時重試失敗的請求。AngularJS中Infinity-scroll的授權攔截器

由於我使用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(); 

當我的頁面加載它立即發送2請求給服務器上傳(),從該指令調用和uploadMore()infinity-scroll

但是,用戶登錄後,頁面不顯示前10個條目,而是顯示連續2次顯示11-20個項目

當我試圖調試它時,我注意到當angular-http-auth重試請求時,它爲這兩個查詢使用了10偏移值($scope.module參數)。

函數upload()uploadMore()angular-http-auth之前運行了2次,所以我想這就是攔截器爲兩個查詢使用更新參數的原因。

有人可以幫我解決這個問題嗎?

回答

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