RxJava超时没有发出错误?

pix*_*xel 7 operators rx-java

有没有选择让它的变体timeout不发出Throwable

我希望complete活动结束.

Xia*_*ang 22

您不需要使用 onErrorResumeNext 映射错误。您可以使用以下方法提供备份 observable:

超时(长,时间单位,可观察)

它会是这样的:

    .timeout(500, TimeUnit.MILLISECONDS, Observable.empty())
Run Code Online (Sandbox Code Playgroud)


dwu*_*sen 11

您可以从另一个错误中恢复Observable,例如:

 Observable<String> data = ...
 data.timeout(1, TimeUnit.SECONDS)
     .onErrorResumeNext(Observable.empty())
     .subscribe(...);
Run Code Online (Sandbox Code Playgroud)

  • 值得注意的是,如果有可能出现来自更上游的错误,这个解决方案不起作用,因为它也会抓住这些... (4认同)
  • 这就是这段代码的作用。它会将您的错误转换为可立即完成的 Observable (2认同)

Luc*_*cci 6

一个不使用的更简单的解决方案Observable.timeout(因此它不会产生错误,并且有捕获不必要的异常的风险),这可能只是简单地在计时器完成之前进行:

Observable<String> data = ...
data.takeUntil(Observable.timer(1, TimeUnit.SECOND))
    .subscribe(...);
Run Code Online (Sandbox Code Playgroud)

  • 但与“timeout”相比,这里的“timer”不会在每次源“Observable”发出一个项目时重新启动。 (2认同)