Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 执行并从重试谓词上的observable返回值_Java_Android_Rx Java_Rx Kotlin - Fatal编程技术网

Java 执行并从重试谓词上的observable返回值

Java 执行并从重试谓词上的observable返回值,java,android,rx-java,rx-kotlin,Java,Android,Rx Java,Rx Kotlin,执行具有可观察和发射值的任务 private val performTask = io.reactivex.Observable.create<Boolean>({ emitter -> // do somethinf emitter.onNext(true) emitter.onComplete() }) //这也是通过重试可以观察到的另一个问题。我想重试2次,但仅当执行任务成功时才重试 fun <T> io.reactivex.Observab

执行具有可观察和发射值的任务

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:


对于正常完成的流,使用repeat2进行编号,或使用repeatBooleanSupplier进行条件重试。repeat执行onComplete。但这种执行是基于错误的@阿卡诺基不知道有人能做相反的事情。有没有推荐的资源可以帮助我提高rx的能力水平?请阅读任何RxJava书籍。
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)
   })  
})