代码之家  ›  专栏  ›  技术社区  ›  Vas

RxView。onError事件后clicks()死亡

  •  1
  • Vas  · 技术社区  · 8 年前

    以下是使用RxBindings的Rx链示例:

    RxView.clicks(refreshIcon)
            .flatMap { Observable.error<Throwable>(IllegalArgumentException()) }
            .subscribe(
                    { Timber.d("onNext")},
                    { error -> Timber.d("onError") })
            .addTo(disposables)
    

    单击一次“我的刷新”图标后,此链将不会再次运行,因为发生了终端事件。我猜我的错误印象是,每当检测到click事件时,就会进行订阅,而实际上每当执行该代码块时,就会进行订阅。

    问题是,我如何使我的链在每次单击时执行/重新执行,即使在点击终端事件之后?寻找一些直观的东西。

    2 回复  |  直到 8 年前
        1
  •  2
  •   Geoffrey Marizy    8 年前

    Observable 必须在第一个错误发生时完成,这是在他们的合同中。为了让你 可观察到 在终端事件中幸存下来,您必须挖掘RxJava Error handling operators retry() 似乎很适合您的情况:

    RxView.clicks(refreshIcon)
            .flatMap { ... }
            .retry()
            .subscribe(...)
            .addTo(disposables)
    
        2
  •  1
  •   Idanatz    8 年前

    它是Rx合同的一部分,当发生错误时,流将收到onError事件并将终止。 除非您主动处理错误,否则请使用例如:onerrorrumerext()