如果没有连接,调用请求的最佳实践 - 每 4-5 秒重复调用一次,直到我们得到响应,使用 Rx
What best practice to call requests if no connection - repeat call every 4-5 seconds until we get response, use Rx
比如我们有一些方法
private fun getMobileData() {
apiClient.getMobileData()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ result ->
datasBehavior.onNext(result.datas)
actionsBehavior.onNext(result.actions)
}) { it.message }.addTo(subscriptions)
}
什么是最好和最简单的方法使用 RX 如果没有连接每 4-5 秒重复调用一次直到我们得到响应
为此你可以使用这个
source.retryWhen(errors -> errors.flatMap(error -> Observable.timer(5, TimeUnit.SECONDS)))
如果出现错误,retryWhen
代码将 运行,直到收到 onSuccess
在您的代码中,它类似于:
private fun getMobileData() {
apiClient.getMobileData()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.retryWhen(e -> e.flatMap(error -> Observable.timer(5, TimeUnit.SECONDS))
.subscribe({ result ->
datasBehavior.onNext(result.datas)
actionsBehavior.onNext(result.actions)
}) { it.message }.addTo(subscriptions)
}
你可以使用 retryWhen
.
private fun getMobileData() {
apiClient.getMobileData()
.subscribeOn(Schedulers.io())
.retryWhen { error ->
error.flatMap { Observable.timer(4, TimeUnit.SECONDS) }
}
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ result ->
datasBehavior.onNext(result.datas)
actionsBehavior.onNext(result.actions)
}) { it.message }.addTo(subscriptions)
}
如果你想检查错误是否完全是由没有连接引起的,你可以在 error.flatMap{}
块中进行,例如 if(it is NoConnectionException)
。
比如我们有一些方法
private fun getMobileData() {
apiClient.getMobileData()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ result ->
datasBehavior.onNext(result.datas)
actionsBehavior.onNext(result.actions)
}) { it.message }.addTo(subscriptions)
}
什么是最好和最简单的方法使用 RX 如果没有连接每 4-5 秒重复调用一次直到我们得到响应
为此你可以使用这个
source.retryWhen(errors -> errors.flatMap(error -> Observable.timer(5, TimeUnit.SECONDS)))
如果出现错误,retryWhen
代码将 运行,直到收到 onSuccess
在您的代码中,它类似于:
private fun getMobileData() {
apiClient.getMobileData()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.retryWhen(e -> e.flatMap(error -> Observable.timer(5, TimeUnit.SECONDS))
.subscribe({ result ->
datasBehavior.onNext(result.datas)
actionsBehavior.onNext(result.actions)
}) { it.message }.addTo(subscriptions)
}
你可以使用 retryWhen
.
private fun getMobileData() {
apiClient.getMobileData()
.subscribeOn(Schedulers.io())
.retryWhen { error ->
error.flatMap { Observable.timer(4, TimeUnit.SECONDS) }
}
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ result ->
datasBehavior.onNext(result.datas)
actionsBehavior.onNext(result.actions)
}) { it.message }.addTo(subscriptions)
}
如果你想检查错误是否完全是由没有连接引起的,你可以在 error.flatMap{}
块中进行,例如 if(it is NoConnectionException)
。