2017-12-11 8 views
1

상태 변경이 발생할 때 보류중인 요청을 모두 중지하려고합니다. 아래 코드는 $ http에서는 제대로 작동하지만 $ resource에서는 제대로 작동하지 않습니다.

    var cancel=$q.defer(); 
    $http.get('api/cafservicestatus',{timeout:cancel.promise,cancel:cancel}).then(onsuccess,onerror); 

    function onsuccess(result) { 
     console.log(result) 
    } 

    function onerror(error) { 
     console.log(error) 
    } 


    function stopHttp() { 
     $http.pendingRequests.forEach(function(request) { 
      if (request.cancel) { 
       request.cancel.resolve(); 
      } 
     }); 
    } 

그러나이 코드는 여기에 $ 자원 작동하지 않습니다 내가 $ 자원을

답변

1

를 사용하여 모든 요청을 중지 할 수 있습니다 방법

   $resource(resourceUrl, {}, { 
     'query': { method: 'GET', isArray: true,timeout:$q.defer().promise,cancel:$q.defer()}, 
     'get': { 
      method: 'GET', 
      transformResponse: function (data) { 
       if (data) { 
        data = angular.fromJson(data); 
       } 
       return data; 
      } 
     }, 
     'update': { method:'PUT' } 
    }); 

내가 알아 낸 $ 자원에 대한 샘플 코드 cancelable : 요청에 true를 추가하고 컨트롤러에서 $ resource의 $ cancelRequest() 메소드를 사용하여 요청을 취소해야합니다. 귀하의 경우

$resource(resourceUrl, {}, { 
    'query': { method: 'GET', isArray: true,cancellable:true}, 
    'get': { 
     method: 'GET', 
     transformResponse: function (data) { 
      if (data) { 
       data = angular.fromJson(data); 
      } 
      return data; 
     } 
    }, 
    'update': { method:'PUT' } 
}); 

에서와 컨트롤러 내부 예를 들어

var aborted= YourService.query(); 

//and later on state change 

    $scope.$on('$stateChangeSuccess',function(event){ 
    aborted.$cancelRequest(); 
     } 
    ); 
+0

이는 내가 원하는 특정 controller.What에 대한 문제를 해결하는 것은 한 번에와 $ rootScope에 대한 모든 요청을 취소하는 것입니다 하지만 어쨌든, 고마워. –