Rx超时运算符

时间:2017-10-03 08:49:04

标签: rx-java rx-android

如果没有项目被发光,我想在x秒后发出一个项目。我试图使用超时运算符。问题是超时操作员需要先执行至少一个项目才能开始倒计时。来自文档:

“如果在指定的超时持续时间内没有发出下一个项目,则生成的Observable开始反映镜像后备Observable。”

这不是我正在寻找的行为。当我订阅我的observable时,如果特定的时间段过去而没有任何发出的项目,我想发出一个特定的项目。

示例:

 getUserLocationFromGPS() //Sometimes I dont receive user location
.timeout(5, TimeUnit.SECONDS, Observable.just(getDefaultLocation())
.subscribe(...);

2 个答案:

答案 0 :(得分:2)

final Observable data = yourApi.getData().take(5, TimeUnit.SECONDS);
final Observable fallback = Observable.just("Fallback");

Observable.concat(data, fallback).firstOrError()
            .subscribe(
                    System.out::println
            );
  1. 如果yourApi.getData()没有发出任何内容,那么您将收到来自您的后备可观察数据。

  2. 如果yourApi.getData()超时,您将收到来自您的后备可观察数据。

  3. 如果yourApi.getData()正常发出,那么您将从中收到数据。

答案 1 :(得分:0)

我没有特别使用java-rx,但这是一个想法:

yarn config set save-prefix "^"

equality每隔5秒就会获得一个项目列表。您可以指定它在getUserLocationFromGPS()

仅发出1个项目后返回

buffer将检查列表是否为空(没有项目被激活)并返回正确的值