前段时间自己写了个小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连接在一起
concat.png
不同的是,假如某个observable抛出了异常,concat会直接走onError,而concatDelayError会在所有数据都发射完后再走onError
concatDelayError.png
concatDelayError.png
渣英语翻译一下:将多个ObservableSource依次连接起来形成一个单独的Observable,依次延迟错误 直到所有的ObservableSource都终止(听起来怪怪的???有种做四六级翻译题的感觉),简单点说就是先onNext再onError(如果有),数据流不会被打断了 最后的解决方案,一切正常
网友评论