2017-05-11 8 views
5

아직 이행되지 않았거나 거부 된 약속을 취소하려면 어떻게합니까?PromiseKit 약속을 취소하십시오

PromiseKit에 대한 설명서에서 약속 취소에 대해 이야기하지만이 작업을 수행하는 방법에 대한 구체적인 예를 찾을 수 없습니다. 을 감안할 때

:

currentOperation = client.load(skip: skip, query: nil) 
currentOperation!.then { (items) in 
    self.processItems(items: items, skip: skip, query: query) 
}.catch { (error) in 
    print("failed to load items - just retrying") 
    self.loadIfNeeded(skip: skip, query: query, onlyInStock: onlyInStock) 
} 

만약 쿼리 변경 (사용자가 검색 창에 텍스트를 입력) 내가 취소하고 새로운 약속을 시작하는 currentOperation을 취소 할 수 있습니다.

+0

약속 체인 취소에 대한 Promisekit의 GitHub의 페이지에서 스레드가 있습니다 : 여기에 최소한의 구현입니다. [여기] (https://github.com/mxcl/PromiseKit/issues/339)를 확인 했습니까? – ridvankucuk

+0

감사합니다. @ridvankucuk. 나는 그것이 처음에 생각했던 것처럼 사소하지 않다는 것을 알 수있다. –

+0

RxSwift, ReactiveKit, Interstellar 또는 다른 종류의 반응 형 SDK 중 하나를 살펴 보는 것이 좋습니다. –

답변

1

약속을 취소하려면 CancellableError 프로토콜을 준수하는 오류 유형으로 거부해야합니다. 이 방법으로 policy 매개 변수가 allErrorsExceptCancellation으로 설정된 모든 catch 블록은 오류를 통과시킵니다.

CancellablePromise가 필요한 경우 Promise를 서브 클래스 화하고 호출시 CancellableError으로 거부 할 cancel() 함수를 구현할 수 있습니다.

https://gist.github.com/EfraimB/918eebdf7dd020801c72da1289c8d797