[英]rx-java2: repeat Maybe/Flowable unless empty
在rx-java2中,存在Maybe.repeat()/ Flowable.repeat()运算符。 但是,如果Maybe / Flowable为空,则它将无限期地重新订阅它,并且不发出值或完成状态。 仅当先前的订阅确实发出了某些内容时,我才能重新订阅吗?
在projectreactor中,可以使用repeatWhen()运算符:
someMono.repeatWhen { it.takeWhile { i -> i > 0 } }
但是在rx-java2中,此运算符不能以这种方式工作。 因此,如果Maybe为空,当前会发出一个错误,然后从此错误中恢复:
someMaybe
.switchIfEmpty(Maybe.error(MyStopException()))
.repeat()
.onErrorResumeNext { th: Throwable ->
if (th is MyStopException)
Flowable.empty()
else
Flowable.error(th)
}
有没有更好/更自然的方法呢?
对于Maybe
情况,您可以执行以下操作:
someMaybe
.flatMapPublisher(value ->
Flowable.just(value).repeat()
)
.subscribe(...);
这样,如果someMaybe
为空,则不调用Flowable.just(value).repeat()
。
对于Flowable情况,您可以执行以下操作:
AtomicBoolean empty = new AtomicBoolean(true);
someFlowable
.doOnNext(value -> empty.set(false))
.repeatWhen(completed ->
completed.takeUntil(__ -> { return empty.get(); })
)
.subscribe(...);
也许有更好的方法,但是我想不出其他任何不涉及实现自定义运算符的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.