如果您不能保证您的operator将遵守 Rx 协议,例如因为您从多个源异步推送,则可以使用serialize运算符。serialize运算符会将不可靠的可观察量转换为合法的,顺序的可观察量。

RxJava操作符serialize 笔记-二十六

让我们首先创建一个违反协议的observable并订阅它。

RxJava操作符serialize 笔记-二十六

日志输出:

RxJava操作符serialize 笔记-二十六

尽管我们的observable试图释放,但最终结果却遵守了Rx规格。之所以发生这种情况,是因为订阅(非常合理地)认为序列结束时订阅终止了订阅。这并不意味着我们将始终关注问题。还有一个名为unsafeSubscribe的方法,它不会自动取消订阅。

RxJava操作符serialize 笔记-二十六

输出:

RxJava操作符serialize 笔记-二十六

我们订阅者的预期行为与前面的示例相同(我们创建了一个Subscriber实例,因为unsafeSubscribe没有带lambda的重载)。但是,我们可以在这里看到我们没有取消订阅,我们一直收到通知。

unsafeSubscribe在其他方面也是不安全的,例如错误处理。它的用处是有限的。文档说它应该只用于使用嵌套订阅的自定义运算符。为了保护这些operator不接收和非法序列,我们可以应用serialize操作符。

RxJava操作符serialize 笔记-二十六

输出:

RxJava操作符serialize 笔记-二十六

我们看到,尽管我们没有取消订阅,但非法通知已被过滤掉。

 

下节再续!

原文:https://github.com/Froussios/Intro-To-RxJava/blob/master/Part%203%20-%20Taming%20the%20sequence/7.%20Custom%20operators.md#lift

RxJava操作符serialize 笔记-二十六

相关文章:

  • 2021-09-03
  • 2021-12-29
  • 2021-11-03
  • 2021-04-23
  • 2022-12-23
  • 2021-04-21
  • 2021-12-03
  • 2022-01-15
猜你喜欢
  • 2021-07-16
  • 2021-11-28
  • 2021-11-03
  • 2021-04-15
  • 2021-07-31
相关资源
相似解决方案