我有以下最小(非)工作示例:
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上切换。
答案 0 :(得分:1)
fromFuture
是blocking订阅它的主题,因此initialValues
永远不会有机会运行,因为takeUntil
首先订阅newValues
然后被封锁了。试试这个:
initialValues
.takeUntil(newValues.subscribeOn(Schedulers.io()))
.concatWith(newValues)
.subscribe(System.out::println, Throwable::printStackTrace);