【问题标题】:execute and return value from observable on retry predicate在重试谓词上从 observable 执行并返回值
【发布时间】:2018-01-19 18:52:09
【问题描述】:

使用可观察值执行任务并发出值

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

只需要说明实现这一点

【问题讨论】:

  • 对于正常完成的流程,使用repeat(2) 进行编号或使用repeat(BooleanSupplier) 进行有条件的重试。
  • 重复执行 onComplete。但是这个执行是基于错误的。 @akarnokd

标签: java android rx-java rx-kotlin


【解决方案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)
   })  
})

【讨论】:

  • 我不知道有人可以做柜台的事情。有什么推荐的资源来帮助我提高 rx 的能力水平吗?
  • 阅读任何 RxJava 书籍。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多