【发布时间】:2018-05-17 18:29:18
【问题描述】:
我是 java rx 的新手,我想知道这是否可能。
我有一个 observable,其中包含不断来自控制器的数据。
它做了这样的事情:
observable.asObservable().debounce(10, SECONDS).subscribe(mySubscriber);
final Subscriber<Long> mySubscriber = new Subscriber<Long>() {
@Override
public void onCompleted() {
System.out.println("killing the subscriber");
}
@Override
public void onError(final Throwable throwable) {
}
@Override
public void onNext(final Long number) {
//some stuff
}
};
效果很好,去抖动和 onNext,但是当我停止发送事件时,我正在等待最后一次去抖动(没有信息)将调用 onCompleted() 但它没有
考虑到事件可以在N次后发布,我需要在最后一次去抖动触发后设置超时。
例如。
如果我有 10 秒的去抖动和 20 的超时。
我在第二个 5 之后得到第一个事件。
去抖被触发,将再等待 10 秒。
我在 14 秒得到第二个事件。
Debounce 被触发,我会等到 24 秒。
在 20 秒触发超时并杀死订阅者。
在 24 秒时,我应该在订阅者处收到事件,但已经被杀死了。
考虑到去抖动,我想在最后一次发射之后设置超时。
【问题讨论】:
-
您必须拥有
observable才能以某种方式完成。如果是主题,请致电onCompleted(),链条将完成。如果它是生成器,请通过timeout和Observable.empty()回退等方式停止它。 -
但它是一个“动态”可观察的,不时发出一个事件,我想要的是如果没有发出 N 时间,我的订阅者将关闭
-
我在之前的评论中已经提到过这个案例:使用
timeout()。 -
times @akarnokd 我想知道如何正确使用超时,例如,如果我有 10 秒的去抖动和 20 的超时,如果我在前 5 秒收到一条消息会发生什么,它调用 debounce 并等待另一个 10,然后我在 15 得到另一个,它将等待另一个 10 ,直到达到 25,但是我的超时将已经被触发并杀死我的订阅者,所以当我发出事件时不会有任何订阅者,那我该如何正确使用超时呢?