【问题标题】:RxJava2 Blocking Observable Timeout: How do I emit a result when timeout fires?RxJava2 Blocking Observable Timeout:当超时触发时如何发出结果?
【发布时间】:2017-08-11 22:29:15
【问题描述】:

我有一个 Observable,它以 JSON 字符串的形式发出事件。我想订阅它并获得第一个字符串。没问题。

但我也希望有一个超时并在超时触发时发出一个固定的 JSON 字符串。

这是我现有的代码:

String jsonString = rxEvents.subscribe().toBlocking().first();

【问题讨论】:

  • 怎么不行?
  • 以上代码有效。它发出作为字符串发出的第一个事件的内容。问题是如何添加一个超时,当超时触发时发出一个固定的(常量)JSON文本字符串。
  • 我会改写。你曾尝试过什么来完成你想要的,但它是如何行不通的?
  • 如果我在计时器触发之前从我的 rxEvents Observable 收到一个事件,我想在 jsonString 中获取该事件。如果超时期限过去了,我想获得一个包含固定错误消息的 jsonString。

标签: rx-java observable blocking rx-java2


【解决方案1】:

只需使用带有 3 个参数的 timeout 版本:

rxEvents
  .timeout(1, TimeUnit.SECONDS, Observable.just("fallback"))
  .toBlocking()
  .first()

请注意,您的示例代码中不需要subscribe

【讨论】:

  • 此响应针对我寻求的解决方案,但无法编译。投诉是类型不匹配(Observable vs Observable extends String>)。
  • 你能粘贴 rxEvents 的类型和方法的返回类型吗
  • rxEvents 是 Observable 类型,其中包含进入响应对象返回给用户的 JSON。在发生超时的情况下,我将模拟一个可用的 JSON 字符串,它为我提供了指示超时所需的用户消息。可观察的
  • 让我补充一下,在每种情况下(获取数据或超时),我只想得到一个 String 类型,其中包含返回给用户应用程序的 JSON。
  • 这很奇怪,理想情况下,您能否提供片段的完整源代码以及尽可能多的类型信息。在任何情况下,您都可以尝试将.cast(String.class) 放在正确的位置(如果没有看到代码或更详细的错误消息,不确定它应该在哪里)以使其编译。但如果类型如你所说,那应该没有必要。
猜你喜欢
  • 1970-01-01
  • 2015-07-21
  • 1970-01-01
  • 1970-01-01
  • 2018-12-21
  • 2015-09-25
  • 2023-03-28
  • 2019-03-07
  • 1970-01-01
相关资源
最近更新 更多