ios - 关于自定义 RxSwift Observable 扩展的问题
问题描述
extension Observable {
func dispatchAsyncMainScheduler() -> Observable<E> {
return self.observeOn(backgroundScheduler).observeOn(MainScheduler.instance)
}
}
我在https://github.com/artsy/eidolon找到了这个片段
我是reactive
这里的初学者。据我了解。subscribeOn
适用于整个链,而observeOn
它下面的应用运算符。
我的问题很明显,这两个连续到底是observeOn
做什么的?
解决方案
这不是一个错字。如果你看一下backgroundScheduler
这个运算符上面 10 行的定义,你会发现它是一个SerialDispatchQueueSceduler
. 这意味着它将操作排队并在后台线程上按顺序执行它们。
他们正在使用它来避免重入异常。我假设这段代码是在MainScheduler.asyncInstance
放入库之前编写的,它做同样的事情。
更多信息可以在 Rx 库中找到:
- 问题:这种行为破坏了可观察序列语法。
next (error | completed)?
这种行为破坏了语法,因为序列事件之间存在重叠。可观察序列试图在前一个事件的发送完成之前发送一个事件。- 解释:这可能意味着您的代码中存在某种意外的循环依赖,或者系统未按预期方式运行。
- 补救措施:如果这是预期的行为,则可以通过添加
.observeOn(MainScheduler.asyncInstance)
或以其他方式将序列事件加入队列来抑制此消息。
推荐阅读
- python - 全局变量在赋值前给出局部变量引用
- python - 在计算子字符串的出现次数时计算与正则表达式和精确子字符串的不匹配?
- sql-server - SQL Server 2014 中复合主键的行数限制
- cassandra - 日期列,它是 Cassandra 中的文本类型。所以我需要一个 UDF 将该文本转换为时间戳,以便我可以查询该列
- c# - 在 Web 和 App 之间使用 FCM 推送通知
- excel - 选择所有包含数据的行和列,然后使用多个条件进行过滤
- javascript - 如何将 mongodb 数据库的内容显示到前端?
- java - 尝试运行设置活动时 Android 应用程序崩溃
- ruby - 从另一个文件中获取鞋子编辑框的文本字符串
- r - 将不同数据帧行中的每个值除以向量中存储的值