首页 > 解决方案 > 重置事件上的 Observable.interval 时间

问题描述

我一收到事件就开始这个 observable

Observable.interval(0, 5, TimeUnit.SECONDS)
                .subscribeOn(Schedulers.io())
                .subscribe()

现在,当另一个事件发生时,我想将间隔重置为 0。我该怎么做?

标签: rx-javarx-java2

解决方案


这取决于您运行此间隔的环境。

一方面,您可以使用 aSerialDisposable并在新事件出现时继续替换内容(从而处理旧的):

final SerialDisposable interval = new SerialDisposable();

public void onEvent() {
    interval.set(
        Observable.interval(0, 5, TimeUnit.SECONDS, Schedulers.io())
                  .subscribe(/* ... */)
    );
}

或者,如果你有一个事件源Observable,你可以申请switchMap

PublishSubject<Event> eventSource = PublishSubject.create();

eventSource.switchMap(event -> 
    Observable.Observable.interval(0, 5, TimeUnit.SECONDS, Schedulers.io())
)
.subscribe(/* ... */);

推荐阅读