extension Observable {
func dispatchAsyncMainScheduler() -> Observable<E> {
return self.observeOn(backgroundScheduler).observeOn(MainScheduler.instance)
}
}
我在https://github.com/artsy/eidolon中找到了此代码段
我是reactive
的初学者。据我了解。 subscribeOn
适用于整个链,而observeOn
适用于其下方的运算符。
我的问题很明显,连续两个observeOn
到底能做什么?
答案 0 :(得分:1)
这不是错字。如果查看此运算符上方10行的backgroundScheduler
的定义,您会发现它是SerialDispatchQueueSceduler
。这意味着它将排队操作并在后台线程上按顺序执行它们。
他们正在使用它来避免重入异常。我假设这段代码是在将MainScheduler.asyncInstance
放入库之前编写的,其作用相同。
更多信息可以在Rx库中找到:
- 问题:此行为破坏了可观察的序列语法。
next (error | completed)?
此行为破坏了语法,因为序列事件之间存在重叠。 可观察到的顺序正在尝试发送事件,而之前的事件发送尚未完成。- 解释:这可能意味着您的代码中存在某种意外的循环依赖关系, 或系统未按预期方式运行。
- 补救措施:如果这是预期的行为,则可以通过添加
.observeOn(MainScheduler.asyncInstance)
来禁止显示此消息 或通过其他方式使序列事件入队。
答案 1 :(得分:0)
对我来说好像是一个错字。应该是.subscribeOn(backgroundScheduler)