rx-java - RXJava : wait until other observable has completed

标签 rx-java rx-java2 rx-android

我对 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 组合运算符来做到这一点?

最佳答案

您可能想使用 concatconcatWith这里。运算符的作用相同,只是静态方法与非静态方法的区别。

假设您得到了 result = obs1.concatWith(obs2);该运算符的作用是:

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

关于rx-java - RXJava : wait until other observable has completed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48351391/

相关文章:

AndroidObservable 从不在主线程上观察

java - RxJava Observable 在第一次发射时收到通知

java - 何时使用 zip() 而不是 zipWith() RxJava

android - 带有 RxJava2 的 Firebase.jobdispatcher 不能异步工作

android - 获取 RxJava Observable 的当前值

java - 如何在订阅开始时显示对话框?

java - RxJava 适合分支工作流程吗?

java - RxJava : How to prepend startWith() default emit EVERY TIME parent observable emits?

android - 使用 concat 从 DB 请求数据,如果它从 Service 中空获取不工作?

java - 在 rxAndroid 中返回对象的 ArrayList