RxJava操作符serialize 笔记<二十六>

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

411d5ba37649bdb979ec43199a8ea3c4b6d.jpg

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

ba46e6e7434dfca97e67f3c45b663fd8b3c.jpg

日志输出:

09852ebf887bf3db8ac8c01d2746ba4f61f.jpg

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

0623f1a2fbc875129ef6020bcd018404e4d.jpg

输出:

cb48fcc1f39961003e028354295bf309abd.jpg

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

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

b550a2b0fc2185810ea0e076144517b8d90.jpg

输出:

ecd67d675a7efc83a644f8411e5b50ac91f.jpg

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

 

下节再续!

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

223108_3TsV_2277632.png

转载于:https://my.oschina.net/u/2277632/blog/2253126

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值