我有一个代码,我会在条件完成之前进行间隔,然后在订阅中发回结果。
但是,因为是一个间隔,订阅继续。
我想知道是否有任何方法可以在发出某些内容时取消订阅Observable间隔
这里是代码
sprintf('%g', 100000)
#=> "100000"
sprintf('%g', 1000000)
#=> "1e+06"
现在作为黑客,我使用计时器然后取消订阅,但这很糟糕!
此致
答案 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在没有满足条件的情况下终止,您将收到异常。