【发布时间】:2018-09-23 14:03:06
【问题描述】:
根据迁移指南 PromiseKit 6.x 更改了他关于 catch 块的策略。在 PMK 4 中,catch 返回了它所附加的承诺。现在catch 是一个链终止符。我理解为什么要进行这些更改,但是...
在我的代码库(与 PK4 连接)中,我从 catch 返回的承诺中获得了一些优势。
func loginAndSync(withServerAddress address: String, port: String) -> Promise<()> {
synchronizationService.stopAllRunningSingleSynchronizations()
return
authorizationService.save(serverAddress: address, andPort: port)
.then {
self.synchronizationService.startSingleFullSynchronization()
}
.then {
self.authorizationService.markAsServerSynced()
}
.catch { error in
log.error(error)
_ = self.authorizationService.markAsServerUnsynced()
}
}
在这个函数中,我做了一些在某些情况下可能失败的逻辑。如果出现错误catch 块应该做一些逻辑,但我还想向loginAndSync 函数的调用者发送这个承诺的结果(履行或拒绝)。上面的函数可以被 ViewController 调用,在 ViewController 中我想显示错误或成功对话框。
这就是我需要一个 Promise 链的两个 catches 的原因。一种用于authorizationService,一种用于UI。
PromiseKit6 中是否有任何解决方法来实现这一点?
编辑
我找到了两种解决方案(变通方法)。我创建了两个答案来将它们分开。未来的读者可以决定哪一个更好或提供新的。
【问题讨论】:
标签: ios swift promise promisekit