2014-01-21 1 views
4

저는 Angular의 $ 리소스를 사용하여 진행중인 REST 호출을 취소하는 방법에 대한 예제를 여러 번 검토했습니다. 아직 어떤 해결책도 찾지 못했지만 Angular 문서에서 나는 그것이 가능해야한다는 인상을 받았습니다.

사용 : 문서에서

$ 자원 (URL [, paramDefaults] [행동]); 문서에 정의 된 작업

하나 :

시간 제한 - {수 | 약속} - 밀리 초 시간 제한 또는 해결 될 때 요청을 중단해야 약속.

진행중인 요청을 취소하기 위해이 제한 시간 작업을 사용하는 방법을 보여주는 작업 예제가 있습니까? 가능한가?

답변

1

예 가능합니다.

var timeoutPromise = $q.defer(); 

{timeout: timeoutPromise.promise} 

이 그럼 당신은 언제든지 약속을 해결할 수 있습니다 :

timeoutPromise.resolve(); 

$timeout.cancel(timeoutPromise) 전화 또한 가능해야한다 당신은 매개 변수로 약속을 defere를 생성하고 설정해야합니다. 무엇이 timeoutPromise.reject()과 같아야합니다.

$timeout

$q

+2

감사합니다. 너는 나를 올바른 방향으로 가리켰다. 그러나 나는 여러 번 사용되는 공장에 놓여있는 $ 자원에 시간 초과를 appplying하는 데 어려움을 겪고있었습니다. 이 패턴을 사용할 때 타임 아웃 구성은 한 번만 초기화 될 수 있습니다. 내가 해결 한 방법은 서비스에서 $ 리소스를 컨트롤러로 옮겨서 휴식 서비스를 호출 할 때마다 새로운 약속으로 제한 시간을 설정할 수있게하는 것이 었습니다. 얼마 후 $ resource에서 $ http로 변경하기로 결정했습니다. – jstensen

3

내 코드 예제 :

var canceler = {}; 
$scope.doSomething = function() { 
    canceler = $q.defer(); 
    $http.post('url', data, {timeout: canceler.promise}). 
    success(function(data) { 
    }). 
    error(function() { 
    }); 
}; 

function cancelPost() { 
    canceler.resolve(); //aborts request 
} 

} 빠른 회신