如何取消尚未履行或拒绝的承诺?
PromiseKit 的文档讨论了取消承诺,但我找不到如何执行此操作的具体示例。
Given:
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
,开始新的承诺。
为了取消承诺,您必须使用符合以下条件的任何错误类型来拒绝它:CancellableError
协议。这样任何 catch 块policy
参数设置为allErrorsExceptCancellation
会让错误通过。
如果您需要 CancellablePromise,您可以继承 Promise 并实现一个 cancel() 函数,该函数将拒绝CancellableError
当被叫时。这是一个最小的实现:
https://gist.github.com/EfraimB/918eebdf7dd020801c72da1289c8d797 https://gist.github.com/EfraimB/918eebdf7dd020801c72da1289c8d797
UPDATE:
这是新 PromiseKit 版本 (6.4.1) 的更新
https://gist.github.com/EfraimB/3ac240fc6e65aa8835df073f68fe32d9 https://gist.github.com/EfraimB/3ac240fc6e65aa8835df073f68fe32d9
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)