若是您不能保证您的operator将遵照 Rx 协议,例如由于您从多个源异步推送,则能够使用serialize运算符。serialize运算符会将不可靠的可观察量转换为合法的,顺序的可观察量。ios
让咱们首先建立一个违反协议的observable并订阅它。git
日志输出:github
尽管咱们的observable试图释放,但最终结果却遵照了Rx规格。之因此发生这种状况,是由于订阅(很是合理地)认为序列结束时订阅终止了订阅。这并不意味着咱们将始终关注问题。还有一个名为unsafeSubscribe的方法,它不会自动取消订阅。安全
输出:异步
咱们订阅者的预期行为与前面的示例相同(咱们建立了一个Subscriber实例,由于unsafeSubscribe没有带lambda的重载)。可是,咱们能够在这里看到咱们没有取消订阅,咱们一直收到通知。3d
unsafeSubscribe在其余方面也是不安全的,例如错误处理。它的用处是有限的。文档说它应该只用于使用嵌套订阅的自定义运算符。为了保护这些operator不接收和非法序列,咱们能够应用serialize操做符。日志
输出:blog
咱们看到,尽管咱们没有取消订阅,但非法通知已被过滤掉。文档
下节再续!it
原文:https://github.com/Froussios/Intro-To-RxJava/blob/master/Part%203%20-%20Taming%20the%20sequence/7.%20Custom%20operators.md#lift