RXJava:等到其他观察者完成

时间:2018-01-20 00:27:09

标签: rx-java rx-java2 rx-android

我对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组合运算符执行此操作?

1 个答案:

答案 0 :(得分:3)

您可能希望在此使用concatconcatWith。运算符也是如此,它只是静态方法和非静态方法。

我们说你得到result = obs1.concatWith(obs2);这个运营商的作用是:

  1. 它订阅obs1并发出从onNext收到的所有元素。
  2. 一旦obs1调用onCompleted,就会取消订阅obs1并订阅obs2。它同样会发出从obs2 onNext收到的所有元素。
  3. 一旦obs2调用onCompleted,它也会调用onCompleted,因为Observable不再有任何元素。