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.interval(500L, TimeUnit.MILLISECONDS)
.map(value -> value * 10);
Observable.switchOnNext(Observable.just(o1, o2)).subscribe(System.out::println);
Thread.sleep(2000L);
}
Run Code Online (Sandbox Code Playgroud)
大理石图显示结果可能如下所示.
| time | 0 | 200 | 400 | 500 | 1000 | 1500 |.....|
|--------|-----|------|-------|------|--------|------|-----|
| o1 | | 0 | 1 |.... | ... | ... | ... |
| o2 | | | | 0 | 10 | 20 | ... |
| result | | 0 | 1 | 0 | 10 | 20 | ... |
Run Code Online (Sandbox Code Playgroud)
但结果变为0,10,20 ......等等如下
| time | 0 | 200 | 400 | 500 | 1000 | 1500 |.....|
|--------|-----|------|-------|------|--------|------|-----|
| o1 | | 0 | 1 |.... | ... | ... | ... |
| o2 | | | | 0 | 10 | 20 | ... |
| result | | | | 0 | 10 | 20 | ... |
Run Code Online (Sandbox Code Playgroud)
此外,如果我反向O1给O2像Observable.just(o1, o2)到Observable.just(o2, o1),其结果将是,只有o1`s值发射.
这是正确的行为吗?
如果它是以太JavaDoc是错误的或程序是错误的,我将创建问题.
或者,我是否误解了描述?
我正在使用RxJava 1.1.5
我猜Javadoc在这种情况下是正确的.您还必须将上部水平线解释为时间.所以你给的switchOnNext是一个Observable包含第一个Observable o1,紧接着另一个Observable o2.所以在大理石图中左对角线代表o1,右对角线代表o2.由于后者紧接在前者之后,前者被丢弃,这就是为什么你只在输出中看到后者.
要获得预期的行为就像是,你可以,例如更换大理石图Observable.just(o1, o2)与
Observable.timer(100L, TimeUnit.MILLISECONDS).map(l -> o1)
.concatWith(Observable.timer(600L, TimeUnit.MILLISECONDS).map(l -> o2));
Run Code Online (Sandbox Code Playgroud)
或者沿着那条线的任何东西
真正的用途是取消订阅第一个,Observable当第二个滚动并订阅第二个.
| 归档时间: |
|
| 查看次数: |
1102 次 |
| 最近记录: |