在retry谓词上执行并返回observable的值

时间:2018-01-19 18:52:10

标签: java android rx-java rx-kotlin

使用observable执行任务并发出值

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
    })

只需要说明实现这个

1 个答案:

答案 0 :(得分:1)

您可以使用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)
   })  
})