RxView.clicks() 在 onError 事件后死亡

RxView.clicks() dies after onError event

这是一个使用 RxBindings 的示例 Rx 链:

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

单击我的刷新图标一次后,由于发生了终止事件,此链不会再次 运行。我猜我误以为只要检测到点击事件就会进行订阅,而实际上只要执行该代码块就会进行订阅。

问题是如何在每次点击时都创建我的链条 execute/re-execute,即使它点击了终端事件?寻找直观的东西。

Observable 必须在第一个错误发生时完成,这是他们的合同。为了让你的 Observable 在终端事件中幸存下来,你将不得不深入研究 RxJava Error handling operators. retry() 似乎很适合你的情况:

RxView.clicks(refreshIcon)
        .flatMap { ... }
        .retry()
        .subscribe(...)
        .addTo(disposables)

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