有关自定义RxSwift Observable扩展的问题

时间:2019-02-18 10:33:20

标签: ios swift rx-swift reactivex

extension Observable {
    func dispatchAsyncMainScheduler() -> Observable<E> {
        return self.observeOn(backgroundScheduler).observeOn(MainScheduler.instance)
    }
}

我在https://github.com/artsy/eidolon中找到了此代码段

我是reactive的初学者。据我了解。 subscribeOn适用于整个链,而observeOn适用于其下方的运算符。

我的问题很明显,连续两个observeOn到底能做什么?

2 个答案:

答案 0 :(得分:1)

这不是错字。如果查看此运算符上方10行的backgroundScheduler的定义,您会发现它是SerialDispatchQueueSceduler。这意味着它将排队操作并在后台线程上按顺序执行它们。

他们正在使用它来避免重入异常。我假设这段代码是在将MainScheduler.asyncInstance放入库之前编写的,其作用相同。

更多信息可以在Rx库中找到:

  
      
  • 问题:此行为破坏了可观察的序列语法。 next (error | completed)?   此行为破坏了语法,因为序列事件之间存在重叠。   可观察到的顺序正在尝试发送事件,而之前的事件发送尚未完成。
  •   
  • 解释:这可能意味着您的代码中存在某种意外的循环依赖关系,   或系统未按预期方式运行。
  •   
  • 补救措施:如果这是预期的行为,则可以通过添加.observeOn(MainScheduler.asyncInstance)来禁止显示此消息   或通过其他方式使序列事件入队。
  •   

答案 1 :(得分:0)

对我来说好像是一个错字。应该是.subscribeOn(backgroundScheduler)