当前位置: 首页 > 知识库问答 >
问题:

如何创建连续发射的RxJava可观察?

吴炎彬
2023-03-14

我正在尝试创建一个RxJava BlockingObservable,它将每隔X毫秒发出一个变量的值,直到(条件==true)或超时发生。

下面的代码似乎与我想要的很接近,但它总是发出一次,然后退出。奇怪的是,我在testolin()中有一个永远不会正确的条件——我希望这个可观察到的持续发出并最终超时,但事实并非如此。

我错过了什么/做错了什么?

Observable.fromCallable(() -> getSendWindow())
        .sample(10, TimeUnit.MILLISECONDS)
        .timeout(30, TimeUnit.SECONDS)
        .takeUntil(sendWindow -> 1==2)
        .doOnError(throwable -> log.warn("Timed out waiting for send window to clear. Giving up."))
        .doOnCompleted(() -> {
            log.info("Send window cleared");
        })
        .toBlocking().forEach(sendWindow -> log.info("sendWindow={}, getSendWindow());

共有1个答案

蒋英博
2023-03-14

.示例并不像您认为的那样。采样率将上述可观测值限制为(最多)每10秒一次。

Observable.fromCallable()只发出一次事件,然后完成。

<代码>。sample()等待10秒,并每隔10秒发出最后一个事件(如果有)。因此,当您将其附加到只有一个事件的可观察对象时,它只发出一个事件。然后就完成了。

你可能真正想要的(我是一个. net程序员,所以原谅我的外壳等)是这个。

编辑:感谢@akanokd告诉我java对重复事件使用间隔。

Observable.interval(10, timeUnit.MILLISECONDS)
    .map(x -> getSendWindow())
    .takeUntil(sendWindow -> 1==2)
    .doOnError(throwable -> log.warn("Timed out waiting for send window to clear. Giving up."))
     .doOnCompleted(() -> {
            log.info("Send window cleared");
        })
    .toBlocking().forEach(sendWindow -> log.info("sendWindow={}, getSendWindow());

可以通过对JAVA特定版本的API调用来编辑此答案。。。

 类似资料:
  • 我在创建一个将返回对象列表的可观察对象时遇到了麻烦。我有一个ID列表,想对我的数据库提出一个请求。在这种情况下,我使用的是Firebase。当得到一个结果时,我希望将这些对象中的每一个编译成一个列表,然后返回该列表。我需要在返回之前等待所有的对象都返回。我在我的视图模型反序列化器类中这样做。这是我的代码。 有几种方法可以从firebase数据库中返回数据,我可以返回Documentsnapshot

  • 问题内容: 我想同步地发出两个Observable对象(它们是异步的),一个接一个地返回第 一个 发出的Observable对象。如果第一个失败,则不应发出第二个。 假设我们有一个登录用户的Observable,还有一个登录 后 自动选择用户帐户的Observable 。 这是我尝试的: 不幸的是,这不适用于我的用例。它将以“ ob1”开始并行发出/调用两个可观察对象。 有人遇到过类似的用例吗?还

  • 我在读一篇教程: http://code.tutsplus.com/tutorials/getting-started-with-reactivex-on-android--cms-24387 它特别关注RxAndroid,但它与RxJava中的几乎相同。我不确定我是否完全理解了这个概念。 下面我写了一个方法,然后是一个示例用法。 我的问题是:这是实现我的函数以便我可以在其他线程上异步运行它们的正

  • 我正在从事一个涉及Hystrix的项目,我决定使用RxJava。现在,忘记Hystrix的其余部分,因为我相信主要问题是我完全搞砸了正确编写可观察代码。 需要:我需要一种方法来返回一个代表多个可观察对象的可观察对象,每个可观察对象都运行一个用户任务。我希望该可观察对象能够返回任务的所有结果,甚至错误。 问题:可观测流会因错误而消亡。如果我有三个任务,而第二个任务引发了一个异常,那么即使第三个任务成

  • 我有一个id列表,并且有一个方法,它接受id并返回可观察的 假设我有用户id(1),我需要使用此方法更新他的配置文件

  • 我正在尝试开发我的第一个RxJava例子 我有一个带有文本框和三个按钮的主要活动。第一个按钮初始化单独类中的整数。第二个按钮订阅一个可观察量,该可观察量假定正在观察整数。第三个按钮将整数的值减小 1。 这是我的密码 和班级 当我尝试使用 订阅时,它只是给了我 的值(即 6),然后它给了我完成! 然后我尝试使用,认为我需要使用,只是而不是,但后来我得到了一个返回的空的,然后再次完成! 有人能帮助我从