Observable.concatDelayError()
2020-06-23 本文已影响0人
qmr777
前段时间自己写了个小app,在启动的时候希望页面先展示缓存的数据,后展示从网上获取到的数据,于是很自然的想到了用concat方法。
Observable.concat(local,network)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(ob);
看起来很美好,但是断网后测试,发现有时候会什么都不展示。。。
打印log后发现,有时onSubscribe后会直接跳到onError,也就是network抛出的异常直接触发了onError,切断了数据流,想了各种办法都不管用。本来以为是local先走完onnext onComplete然后在请求网络的
查阅资料后找到了Observable.concatDelayError()方法,和concat方法类似,都是把两个Observable连接在一起
![](https://img.haomeiwen.com/i2860886/d72eeb1c4e27738c.png)
不同的是,假如某个observable抛出了异常,concat会直接走onError,而concatDelayError会在所有数据都发射完后再走onError
![](https://img.haomeiwen.com/i2860886/25309862afd4aed3.png)
![](https://img.haomeiwen.com/i2860886/d8c9b0149cca1ab8.png)
渣英语翻译一下:将多个ObservableSource依次连接起来形成一个单独的Observable,依次延迟错误 直到所有的ObservableSource都终止(听起来怪怪的???有种做四六级翻译题的感觉),简单点说就是先onNext再onError(如果有),数据流不会被打断了
![](https://img.haomeiwen.com/i2860886/8a4b3e0542a25e7d.png)