RXJava - 当其中一个数据可用时,永久切换可观察数据

时间:2018-04-24 13:49:04

标签: java reactive-programming rx-java2

我有以下最小(非)工作示例:

import org.junit.Test;
import io.reactivex.Observable;
import com.google.common.util.concurrent.SettableFuture;

@Test
public void testTest() {
    final Observable<Long> initialValues = Observable.fromArray(100L, 200L, 300L);
    final SettableFuture<Long> future = SettableFuture.create();
    final Observable<Long> newValues = Observable.fromFuture(future);

    new Thread(
            () -> {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                future.set(400L);
            }
    ).start();

    initialValues.takeUntil(newValues).concatWith(newValues).subscribe(System.out::println, Throwable::printStackTrace);
}

我期待以下输出:

100

200

300

但输出是

400

我的逻辑是否有任何错误?我试图完成以下行为:

让2个可观察量:A,B。从A中取值直到B开始发布值,然后专门在B上切换。

1 个答案:

答案 0 :(得分:1)

fromFutureblocking订阅它的主题,因此initialValues永远不会有机会运行,因为takeUntil首先订阅newValues然后被封锁了。试试这个:

initialValues
.takeUntil(newValues.subscribeOn(Schedulers.io()))
.concatWith(newValues)
.subscribe(System.out::println, Throwable::printStackTrace);