发布后取消订阅间隔

时间:2017-06-30 09:55:58

标签: java rx-java rx-java2

我有一个代码,我会在条件完成之前进行间隔,然后在订阅中发回结果。

但是,因为是一个间隔,订阅继续。

我想知道是否有任何方法可以在发出某些内容时取消订阅Observable间隔

这里是代码

sprintf('%g', 100000)
#=> "100000"

sprintf('%g', 1000000)
#=> "1e+06"

现在作为黑客,我使用计时器然后取消订阅,但这很糟糕!

此致

1 个答案:

答案 0 :(得分:1)

您可以使用first运算符

Subscription subscriber = Observable.interval(0, 5, TimeUnit.MILLISECONDS)
                .map(i -> eventHandler.getProcessedEvents())
                .first(eventsProcessed -> eventsProcessed >= 10)
                .doOnNext(eventsProcessed -> eventHandler.initProcessedEvents())
                .doOnNext(eventsProcessed -> logger.info(null, "Total number of events processed:" + eventsProcessed))
                .subscribe(t -> resumeRequest(asyncResponse));

而不是过滤器。这可确保您在满足条件时只获得一次排放。请注意,如果条件间隔Observable在没有满足条件的情况下终止,您将收到异常。