我对 RX 世界还比较陌生。所以,有很多我不理解的运算符。我花了几个小时来找出问题的解决方案。
这是:
我有一个“冷”observable(observable I),它只发出一个结果。它用于在应用程序加载其他项目以显示之前加载一些初始数据
另一方面,我有另一个“热门”observable(observable II),它通过分页加载数据,因此会发出许多结果。
我希望observable II等待observable I。如果在创建observable II时,observable I已经完成,我希望observable II不再加载初始数据。
可视化:
Case 1
Observable I [---------------------------------------------------]
Observable II .................[----------------------------------------
这里 observabele II 应该等待 observable I 并且在那之后才继续工作。
Case 2
Observable I [--------]
Observable II ...............[----------------------------------------
这里observable II应该只检查observable I是否完成并继续工作
在这两种情况下,observable I 的执行不应发生多次。
问题:
如何使用 RX 组合运算符来做到这一点?
最佳答案
您可能想使用 concat
或concatWith
这里。运算符的作用相同,只是静态方法与非静态方法的区别。
假设您得到了 result = obs1.concatWith(obs2)
;该运算符的作用是:
- 它订阅
obs1
并发出从onNext
接收到的所有元素。 - 一旦
obs1
调用onCompleted
,它就会取消订阅obs1
并订阅obs2
。它同样会发出从obs2
的onNext
接收到的所有元素。 - 一旦
obs2
调用onCompleted
,它也会调用onCompleted
,因为不再有任何元素来自Observable
>.
关于rx-java - RXJava : wait until other observable has completed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48351391/