繁体   English   中英

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

[英]Question about a custom RxSwift Observable extension

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

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

我是一位reactive初学者。 据我了解。 subscribeOn适用,而整个产业链observeOn低于其应用于运营商。

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM