RxJava 高级操作符详解
1. ambWith() 与 amb() 操作符
可以使用非静态的 ambWith() 编写等效程序,但它的可读性较差,因为它隐藏了 amb() 的对称性。看起来像是将第二个流应用于第一个流之上,而实际上两个流应该被平等对待。示例代码如下:
stream(100, 17, "S")
.ambWith(stream(200, 10, "F"))
.subscribe(log::info);
无论使用哪种版本,结果都是相同的。慢流产生事件的频率较低,但第一个事件在 100 毫秒后出现,而快流在 200 毫秒后开始。 amb() 的作用是首先订阅两个 Observable ,当在慢流中遇到第一个事件时,它会立即取消订阅快流,并只转发慢流的事件。操作流程如下:
1. 订阅慢流(S)。
2. 订阅快流(F)。
3. 当慢流出现第一个事件时,取消订阅快流。
4. 只转发慢流的事件。
示例日志如下:
14:46:13.334: Subscribe to S
14:46:13.341: Subscribe to F
14:46:13.439: Unsubscribe from F
14:46:13.442: S0
14:46:13.456: S1
14:46:13.473: S2
14:46:13
超级会员免费看
订阅专栏 解锁全文
55

被折叠的 条评论
为什么被折叠?



