2017-05-11 6 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に設定されたキャッチブロックは、エラーを通過させます。

CancellablePromiseが必要な場合は、Promiseをサブクラス化し、呼び出されるとCancellableErrorで拒否するcancel()関数を実装できます。ここでは最小限の実装です:

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

関連する問題