Rx java RxJava';s switchOnNext方法的行为与JavaDoc描述的不同
rx.Observable.switchOnNext(Observable>)的行为与JavaDoc中描述的大理石图不同 如果我在下面试一试Rx java RxJava';s switchOnNext方法的行为与JavaDoc描述的不同,rx-java,Rx Java,rx.Observable.switchOnNext(Observable>)的行为与JavaDoc中描述的大理石图不同 如果我在下面试一试 public static void main(String[] args) throws Exception { Observable<Long> o1 = Observable.interval(200L, TimeUnit.MILLISECONDS); Observable<Long> o2 = Observable.
public static void main(String[] args) throws Exception {
Observable<Long> o1 = Observable.interval(200L, TimeUnit.MILLISECONDS);
Observable<Long> o2 = Observable.interval(500L, TimeUnit.MILLISECONDS)
.map(value -> value * 10);
Observable.switchOnNext(Observable.just(o1, o2)).subscribe(System.out::println);
Thread.sleep(2000L);
}
但是结果变成0,10,20…等等,如下所示
| time | 0 | 200 | 400 | 500 | 1000 | 1500 |.....|
|--------|-----|------|-------|------|--------|------|-----|
| o1 | | 0 | 1 |.... | ... | ... | ... |
| o2 | | | | 0 | 10 | 20 | ... |
| result | | | | 0 | 10 | 20 | ... |
同样,如果我把o1倒转成o2,比如说可以观察到的,刚好(o1,o2)到可以观察到的,刚好(o2,o1),
结果是只发出o1的值
这是正确的行为吗
如果是乙醚错误或程序错误,我将创建问题
或者,我是否误解了描述
我使用的是rxjava1.1.5,我想Javadoc在这种情况下是正确的。你也必须把上面的水平线解释为时间。因此,您给
switchOnNext
的是一个可观察的
,包含第一个可观察的o1
,紧接着是另一个可观察的o2
。因此,在大理石图中,左对角线表示o1
,右对角线表示o2
。因为后者紧跟在前者之后,所以前者被丢弃,这就是为什么您只在输出中看到后者
例如,要获得大理石图中的预期行为,您可以将Observable.just(o1,o2)
替换为
Observable.timer(100L, TimeUnit.MILLISECONDS).map(l -> o1)
.concatWith(Observable.timer(600L, TimeUnit.MILLISECONDS).map(l -> o2));
或者任何类似的东西
它的真正用途是在第二个可观察到的
中取消订阅,而改为订阅第二个。我想Javadoc在这种情况下是正确的。你也必须把上面的水平线解释为时间。因此,您给switchOnNext
的是一个可观察的
,包含第一个可观察的o1
,紧接着是另一个可观察的o2
。因此,在大理石图中,左对角线表示o1
,右对角线表示o2
。因为后者紧跟在前者之后,所以前者被丢弃,这就是为什么您只在输出中看到后者
例如,要获得大理石图中的预期行为,您可以将Observable.just(o1,o2)
替换为
Observable.timer(100L, TimeUnit.MILLISECONDS).map(l -> o1)
.concatWith(Observable.timer(600L, TimeUnit.MILLISECONDS).map(l -> o2));
或者任何类似的东西
这一功能的真正用途是在第一个可观察到的
出现时取消订阅,而改为订阅第二个。感谢您的帮助!现在,我知道我误解了switchOnNext
方法,我理解了switchOnNext
。由于观测值是同时订阅的,所以结果并没有达到我的预期。谢谢你的帮助!现在,我知道我误解了switchOnNext
方法,我理解了switchOnNext
。由于观测值是同时订阅的,所以结果并没有达到我的预期。