Kotlin RxJava';当你不经意间一直在努力时

Kotlin RxJava';当你不经意间一直在努力时,kotlin,rx-java,rx-java3,retrywhen,Kotlin,Rx Java,Rx Java3,Retrywhen,谁能 解释为什么调用retryWhen时,以下代码会无限期地重试一次 更正代码以在Random.nextBoolean()时停止重试 返回true 我认为由于Random.nextBoolean(),调用retryWhen时有50%的可能性。然而,一旦被调用,它就会进入一个无限循环 import io.reactivex.rxjava3.core.Observable 导入kotlin.random.random 主要内容(){ 可观察 .just(单位) .平面图{ if(Random.nex

谁能

  • 解释为什么调用
    retryWhen
    时,以下代码会无限期地重试一次
  • 更正代码以在
    Random.nextBoolean()时停止重试
    返回
    true
  • 我认为由于
    Random.nextBoolean()
    ,调用
    retryWhen
    时有50%的可能性。然而,一旦被调用,它就会进入一个无限循环

    import io.reactivex.rxjava3.core.Observable
    导入kotlin.random.random
    主要内容(){
    可观察
    .just(单位)
    .平面图{
    if(Random.nextBoolean()){
    可观察的。仅(单位)
    }否则{
    可观察错误(Throwable())
    }retryWhen先生{
    它是平面图{
    println(“retryWhen”)
    可观察的。仅(单位)
    }
    }
    }
    .subscribe()
    }
    
    输出:

    retryWhen
    retryWhen
    retryWhen
    ⋮
    (continued)
    
  • 您已经将
    retryWhen
    应用于if语句任一分支的执行结果

  • retryWhen
    操作符链接到
    flatMap
    生成的流:

  • e、 g

  • 您已经将
    retryWhen
    应用于if语句任一分支的执行结果

  • retryWhen
    操作符链接到
    flatMap
    生成的流:

  • e、 g


    请看一看同样的

    答案:
    retryWhen
    观察者订阅时调用所提供的函数,这样您就有了一个主序列,并伴随着一个序列,该序列发出主序列失败的
    可丢弃的
    。您应该在这个
    函数中得到的
    可观察的
    上组合一个逻辑
    ,因此最后,一个
    可丢弃的
    将在另一端产生一个值

    我想你的期望是:
    可观察
    .just(单位)
    .平面图{
    if(Random.nextBoolean()){
    可观察的。仅(单位)
    }否则{
    可观察错误(Throwable())
    }retryWhen先生{
    需要一段时间{
    Random.nextBoolean()
    }
    doOnNext先生{
    println(“retryWhen”)
    }
    }
    }
    .subscribe()
    
    请看同样的图片

    答案:
    retryWhen
    观察者订阅时调用所提供的函数,这样您就有了一个主序列,并伴随着一个序列,该序列发出主序列失败的
    可丢弃的
    。您应该在这个
    函数中得到的
    可观察的
    上组合一个逻辑
    ,因此最后,一个
    可丢弃的
    将在另一端产生一个值

    我想你的期望是:
    可观察
    .just(单位)
    .平面图{
    if(Random.nextBoolean()){
    可观察的。仅(单位)
    }否则{
    可观察错误(Throwable())
    }retryWhen先生{
    需要一段时间{
    Random.nextBoolean()
    }
    doOnNext先生{
    println(“retryWhen”)
    }
    }
    }
    .subscribe()
    
    Observable
      .just(Unit)
      .flatMap {
        if(Random.nextBoolean()) {
          Observable.just(Unit)
        } else {
          Observable.error(Throwable())
        }
      }
      .retryWhen {
          it.flatMap {
            println("retryWhen")
            Observable.just(Unit)
          }
      }
      .subscribe()