在重试谓词上执行和 return observable 值
execute and return value from observable on retry predicate
执行具有可观察值并发出值的任务
private val performTask = io.reactivex.Observable.create<Boolean>({ emitter ->
// do somethinf
emitter.onNext(true)
emitter.onComplete()
})
// 这也是另一个带有重试的可观察对象。我想重试 2 次,但前提是执行任务成功。
fun <T> io.reactivex.Observable<T>.retryAuth(): Observable<T> {
return this.retry ({ count, error ->
if (count == 2 && error is ApolloException) {
// do something with performTask and return the value
} else false
})
只需要说明如何实现这一点
你可以使用 retryWhen
:
this.retryWhen({ errors ->
val counter = AtomicInteger()
.flatMap({ error ->
if (counter.incrementAndGet() <= 2 && error is ApolloException) {
return performTask
.flatMap({ result ->
if (result) {
return Observable.just(true)
}
return Observable.error(error)
})
}
return Observable.error(error)
})
})
执行具有可观察值并发出值的任务
private val performTask = io.reactivex.Observable.create<Boolean>({ emitter ->
// do somethinf
emitter.onNext(true)
emitter.onComplete()
})
// 这也是另一个带有重试的可观察对象。我想重试 2 次,但前提是执行任务成功。
fun <T> io.reactivex.Observable<T>.retryAuth(): Observable<T> {
return this.retry ({ count, error ->
if (count == 2 && error is ApolloException) {
// do something with performTask and return the value
} else false
})
只需要说明如何实现这一点
你可以使用 retryWhen
:
this.retryWhen({ errors ->
val counter = AtomicInteger()
.flatMap({ error ->
if (counter.incrementAndGet() <= 2 && error is ApolloException) {
return performTask
.flatMap({ result ->
if (result) {
return Observable.just(true)
}
return Observable.error(error)
})
}
return Observable.error(error)
})
})