【发布时间】:2016-09-06 17:05:09
【问题描述】:
我有一个改造电话,想每 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 请求失败,它会自行重试。所以我有一个新请求以及所有重试。
我的问题:如何在不取消订阅 poll 信号的情况下处理 api 错误?
【问题讨论】:
标签: java android rx-java retrofit2 rx-android