RxJava + 改造 + 轮询
2022-09-04 03:59:02
我有一个改造电话,想每30秒回忆一次。为此,我使用Observable.interval(0, 30, TimeUnit.SECONDS)
Observable
.interval(0, 30, TimeUnit.SECONDS)
.flatMap(x -> RestApi.instance().getUsers())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(list -> {
// ...
},
error -> Timber.e(error, "can't load users"));
我的问题:如果api调用失败,则调用订阅并取消订阅并且轮询不再工作:-(onError
为了捕获api错误,我添加了一个retryWhen
Observable
.interval(0, 30, TimeUnit.SECONDS)
.flatMap(x -> RestApi.instance().getUsers()
.retryWhen(errors -> errors
.flatMap(error -> Observable.timer(15, TimeUnit.SECONDS))))
.observeOn(AndroidSchedulers.mainThread())
.subscribe(list -> {
// ...
},
error -> Timber.e(error, "can't load users"));
这会捕获错误,但随着时间的推移,我收到了多个 api 调用。每30秒,我就会得到一个新的轮询信号,该信号以新的api请求结束。但是,如果 api 请求失败,它会自行重试。所以我有一个新的请求加上所有重试。
我的问题:如何在不取消订阅投票信号的情况下处理API错误?