pro*_*m85 8 android reactive-programming rx-java
有没有办法实现以下目标:
我有3个类型的观察者Observable<MyData>.我想要的是:
onCompleted第一个观察者onCompleted第二个可观测量onCompleted第三个可观测量这可以用,concat但我只能观察到最后一次onCompleted.
难看的解决方案
我知道,我可以实现这一目标,如果我onCompleted从前一个事件中开始下一个可以理解的话.
题
即使使用任意数量的可观察量,还有其他方法可以实现这一点吗?我想避免从onCompleted事件中将这一切联系在一起,因为这看起来非常丑陋,链接越深,它就越不清楚......
编辑 - UseCase
我想不断更新UI,我想知道,每个级别的数据加载完成
nsh*_*ura 13
我希望下面的代码有帮助.
Observable<MyData> observable1 = ...;
Observable<MyData> observable2 = ...;
Observable<MyData> observable3 = ...;
Observable
.concat(observable1.doOnCompleted(this::onCompleteObservable1),
observable2.doOnCompleted(this::onCompleteObservable2),
observable3.doOnCompleted(this::onCompleteObservable3))
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe( ... );
Run Code Online (Sandbox Code Playgroud)
这是示例方法.
void onCompleteObservable1() {
//do some work
}
void onCompleteObservable2() {
//do some work
}
void onCompleteObservable3() {
//do some work
}
Run Code Online (Sandbox Code Playgroud)
我认为concatMap可能是答案。使用 concatMap,您可以连接可观察值并订阅一次,因此您的代码可能类似于:
Observable.just(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
.concatMap(integer -> Observable.just(integer)
.observeOn(Schedulers.computation())
.concatMap(i -> {
try {
Thread.sleep(new Random().nextInt(1000));
return Observable.just(2 * i);
} catch (InterruptedException e) {
e.printStackTrace();
return Observable.error(e);
}
}))
.subscribe(System.out::println,
Throwable::printStackTrace,
() -> System.out.println("onCompleted"));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6413 次 |
| 最近记录: |