java - 只要主要可观察值未发出任何值,就使用辅助/备用可观察值

标签 java rx-java reactive-programming rx-java2

以下是我想要实现的目标:

|--------------------A-A-A-A-A-A| primary (behavior subject)
|-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-| secondary (flowable)
|-B-B-B-B-B-B-B-B-B-BA-A-A-A-A-A| result (flowable)

基本上,我正在等待用户输入(通过主要可观察的),但如果用户尚未输入任何内容,我想提供系统生成的值。一旦收到用户输入,辅助可观察量将不再使用。

我研究了 switchIfEmptycombineLatest 但它们不符合我的需求,因为:

  1. switchIfEmpty 仅在主要可观察信号 onComplete 时有效。
  2. combineLatest 仅当两个可观察量都发出值时才有效

有什么办法可以做到这一点吗?

最佳答案

我不确定这是否是最简单或最优雅的方法,但这可行:

const a = Observable.interval(5000);
const b = Observable.interval(1000);

const sharedA = a.shareReplay(1);

const result = b.takeUntil(sharedA).concat(sharedA);

Demo

另一种也许简单的方法是

const sharedA = a.share();
const result = b.takeUntil(sharedA).merge(sharedA);

Demo

关于java - 只要主要可观察值未发出任何值,就使用辅助/备用可观察值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44933668/

相关文章:

java - RxJava 对列表执行操作并返回可观察对象

javascript - 如何使用 RxJS 5 无损地对限制请求进行评级

java - 使用Get和Set时是否可以应用搜索功能?

java - a += b 真的等同于 a = a + b 吗?

java - 从 Android 应用程序登录使用 HTTP 基本身份验证的网站

rx-java - RxJava : How to interrupt thread on unsubscribe?

java - 如何为多个可观察对象设置超时

java - RxJava : How to express doOnFirst()?

javascript - 重用数据流一段时间

java - 二维数组中的联合查找 (Java)