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

问题描述 投票:0回答:2
extension Observable {
    func dispatchAsyncMainScheduler() -> Observable<E> {
        return self.observeOn(backgroundScheduler).observeOn(MainScheduler.instance)
    }
}

我在https://github.com/artsy/eidolon找到了这个片段

我是这里的reactive初学者。据我所知。 subscribeOn适用于整个链,而observeOn适用于它下面的运算符。

我的问题很明显,这两个连续的observeOn究竟做了什么?

ios swift rx-swift reactivex
2个回答
1
投票

这不是一个错字。如果你看一下这个算子上面的backgroundScheduler 10行的定义,你会发现它是一个SerialDispatchQueueSceduler。这意味着它将操作排队并在后台线程上按顺序执行它们。

他们正在使用它来避免重入异常。我假设这个代码是在MainScheduler.asyncInstance被放入库之前编写的,它做同样的事情。

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

  • 问题:此行为违反了可观察的序列语法。 next (error | completed)?此行为会破坏语法,因为序列事件之间存在重叠。可观察序列试图在发送先前事件之前发送事件。
  • 解释:这可能意味着您的代码中存在某种意外的循环依赖关系,或者系统未按预期方式运行。
  • 补救措施:如果这是预期的行为,可以通过添加.observeOn(MainScheduler.asyncInstance)或以其他方式排列序列事件来抑制此消息。

0
投票

看起来像是一个错字。应该是.subscribeOn(backgroundScheduler)

© www.soinside.com 2019 - 2024. All rights reserved.