【发布时间】:2020-01-31 11:35:26
【问题描述】:
我在 RXSwift (ReactiveX) 的帮助下设计了一个呼叫管理器,它与 API 持续交互。调用管理器包含几个对象,这些对象本身包含一个 indicator(指示从 API 加载的状态信息)和 control(发送到 API 的请求)。
class CallManagerObjectA() {
var control = PublishSubject<String>()
var indicator = BehaviorSubject<String>(value: "string status")
}
在调用管理器中,调度程序定期向可观察指标提供新值:
<... API response ...>
indicator.onNext(newValue)
在视图控制器的其他地方,将观察到标签的指示器:
indicator.subscribe(onNext: { label.stringValue = $0 })
在同一个视图控制器中,用户可以通过 GUI 元素连续控制对象状态:
control.onNext(commandValue)
在调用管理器中,将观察 API 调用的控件:
control.subscribe(onNext: { (command) in
// API request call
})
到目前为止一切都很好,这与响应式模式配合得非常好。 现在,我正在寻找一个处理错误的好解决方案,如果调用管理器在 API 交互过程中识别错误并在视图控制器中向用户显示这些错误。我立刻想到了这样的事情:
// Call manager recognizes the error
control.onError(error)
...
// Call manager ignores errors for the subscriber
control.retry().ignoreErrors().subscribe(onNext: { (command) in
// API request call
})
...
// View controller shows the errors
indicator.subscribe(onNext: { label.stringValue = $0 })
control.subscribe(onError: { print("error", $0) })
然而,这最终会陷入无限循环。 我担心我对反应式编程有一个基本的理解问题,或者我错过了一些非常重要的东西,但我无法理解在这种反应式模式环境中如何处理错误。
【问题讨论】:
-
我建议你加入 RxSwift slack 频道,学习如何使用它的基础知识。 rxslack.herokuapp.com
-
好建议,谢谢
标签: swift reactive-programming rx-swift reactive reactivex