我创建了这个订阅,创建了另一个订阅:
this.loggingInterval$
.filter(interval -> interval > 0)
.doAfterNext(
interval ->
{
Observable.interval(interval, TimeUnit.SECONDS)
.doOnNext(t -> this.readAdditionalConfigurationFile())
.doOnError(t -> LoggerFactory.getLogger(this.getClass()).error(t.toString()))
.takeUntil(this.destroy$)
.subscribe();
}
)
.takeUntil(this.destroy$)
.subscribe();
因此,每次interval
更改并且大于0时,我都会在每个新interval
秒内构建另一个订阅读取配置文件。当destroy$
发出true
时,它就会被销毁。
问题是interval.doOnNext()
永远不会到达。
this.destroy$ = BehaviorSubject.createDefault(false);
this.loggingInterval$ = BehaviorSubject.createDefault(10);
有什么想法吗?
答案 0 :(得分:1)
它是在一个可观察的内容中创建订阅的反模式;有更简单的方法可以做到这一点。
this
.loggingInterval$
.filter(interval -> interval > 0)
.distinctUntilChanged()
.switchMap(interval -> Observable.interval(interval, TimeUnit.SECONDS, Schedulers.io()))
.doOnNext(dummy -> this.readAdditionalConfigurationFile())
.doOnError(t -> LoggerFactory.getLogger(this.getClass()).error(t.toString()))
.takeUntil(this.destroy$)
.subscribe();
如果订阅被取消订阅(这就是你的销毁$应该做什么,对吗?)上面也有终止整个链的好处。