我对RX世界相对较新。所以,有很多我不理解的运营商。我花了几个小时来找出解决问题的方法。
这是:
我有一个'冷'可观察(可观察的我),它只发出一个结果。它是用于在应用程序加载其他项目之前加载一些初始数据
另一方面,我有另一个'热'可观察( observable II ),它正在使用分页加载数据,因此会产生很多结果。
我希望 observable II 等待 observable I 。如果此时 observable II 已创建,可观察我已完成,我希望 observable II 不再次加载初始数据。
要想象:
Case 1
Observable I [---------------------------------------------------]
Observable II .................[----------------------------------------
observabele II 应该等待可观察的我,然后才能继续工作。
Case 2
Observable I [--------]
Observable II ...............[----------------------------------------
此处可观察的II 应该只检查可观察的我是否已完成并继续工作
在这两种情况下,可观察的I 的执行不应超过一次。
问题:
如何使用RX组合运算符执行此操作?
答案 0 :(得分:3)
您可能希望在此使用concat
或concatWith
。运算符也是如此,它只是静态方法和非静态方法。
我们说你得到result = obs1.concatWith(obs2)
;这个运营商的作用是:
obs1
并发出从onNext
收到的所有元素。obs1
调用onCompleted
,就会取消订阅obs1
并订阅obs2
。它同样会发出从obs2
onNext
收到的所有元素。obs2
调用onCompleted
,它也会调用onCompleted
,因为Observable
不再有任何元素。