我有一个上游以块的形式发送数据。应使用throttleFirst限制此流。此外,在完成所有油门定时器后,应发出最后一个值。不幸的是,RxJava 2中没有throttleFierstBuffered运算符,因此我实现了一个ObservableTransformer:
upstream -> {
Observable<T> autoConnectingUpstream =
upstream //
.publish()
.autoConnect(2);
return Observable.merge(
autoConnectingUpstream.throttleFirst(message.updatelimit().get(), TimeUnit.MILLISECONDS, scheduler),
autoConnectingUpstream.debounce(message.updatelimit().get(), TimeUnit.MILLISECONDS, scheduler))
//if debounce and throttle emit the same item
.distinctUntilChanged();
}
除处理外,它运作良好。在生成Observable后,我也想处理上游。我怎么能这样做?
我曾尝试使用autoConnect(2,一次性 - &gt; {})访问一次性用品,但必须有更好的方法。到目前为止,我得到了这个,我不喜欢它:
Observable.<T>create(
emitter -> {
Observable<T> autoConnectingUpstream =
upstream //
.publish()
.autoConnect(2, emitter::setDisposable);
Observable.merge(
autoConnectingUpstream.throttleFirst(message.updatelimit().get(), TimeUnit.MILLISECONDS, scheduler),
autoConnectingUpstream.debounce(message.updatelimit().get(), TimeUnit.MILLISECONDS, scheduler))
//if debounce and throttle emit the same item
.distinctUntilChanged()
.subscribe(emitter::onNext, emitter::onError, emitter::onComplete);
});
答案 0 :(得分:2)
我在这里回答我自己的问题,所以如果我错了,请告诉我。
根据akarnokd的评论,解决方案将如下所示:
Observable.<T>create(
emitter -> {
Observable<T> autoConnectingUpstream =
upstream //
.publish()
.autoConnect(2, emitter::setDisposable);
Observable.merge(
autoConnectingUpstream.throttleFirst(message.updatelimit().get(), TimeUnit.MILLISECONDS, scheduler),
autoConnectingUpstream.debounce(message.updatelimit().get(), TimeUnit.MILLISECONDS, scheduler))
//if debounce and throttle emit the same item
.distinctUntilChanged()
.subscribe(emitter::onNext, emitter::onError, emitter::onComplete);
});
autoConnect的第二个参数是一个Action,它表示已建立的2个连接观察者的连接。
当观察者处理生成的Observable时,这可以与emitter :: setDisposable一起使用来处理autoConnect。