2017-05-11 4 views
5

Wie storniere ich ein Versprechen, das noch nicht erfüllt oder abgelehnt wurde?PromiseKit ein Versprechen aufheben

Die Dokumentation für PromiseKit spricht über das Abbrechen eines Versprechens, aber ich kann kein spezifisches Beispiel dafür finden.

Gegeben:

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

Wenn die Abfrage Änderungen (Benutzer Text in der Suchleiste eingibt) Ich möchte die currentOperation abbrechen und entsorgen, ein neues Versprechen beginnen.

+0

Es ist ein Thread auf der Promisekit Github Seite über Versprechen Kette Stornierung. Hast du [hier] (https://github.com/mxcl/PromiseKit/issues/339) überprüft? – ridvankucuk

+0

Ich sehe, danke @ridvankucuk. Ich kann sehen, dass es nicht so trivial ist, wie ich ursprünglich dachte. –

+0

Sie würden besser in RxSwift, ReactiveKit, Interstellar oder einer der anderen reaktiven SDKs für diese Art von Arbeit gedient. –

Antwort

1

Um ein Versprechen zu stornieren, müssen Sie es mit einem beliebigen Fehlertyp ablehnen, der dem Protokoll CancellableError entspricht. Auf diese Weise wird jeder Catch-Block mit policy Parameter, der auf allErrorsExceptCancellation gesetzt ist, den Fehler passieren lassen.

Wenn Sie eine CancelablePromise benötigen, können Sie Promise ableiten und eine cancel() -Funktion implementieren, die beim Aufruf mit einer CancellableError zurückgewiesen wird. Hier ist eine minimale Implementierung:

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