RxJava2:未达到订阅

时间:2017-06-06 12:44:57

标签: rx-java

我创建了这个订阅,创建了另一个订阅:

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);

有什么想法吗?

1 个答案:

答案 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();

如果订阅被取消订阅(这就是你的销毁$应该做什么,对吗?)上面也有终止整个链的好处。