繁体   English   中英

RxJava Observable最短执行时间

[英]RxJava Observable minimum execution time

我有一个Observable(从网络获取数据)。 问题是可观察的速度可能快或慢,具体取决于网络条件。

我显示进度小部件,当observable正在执行时,并在observable完成时隐藏它。 当网络快速 - 进展flikers(出现和消失)。 我想将可观察的最小执行时间设置为1秒。 我怎样才能做到这一点?

“延迟”运算符不是一个选项,因为即使对于慢速网络它也会延迟。

您可以使用Observable.zip() 特定

Observable<Response> network = ...

一个人可以做到

Observable<Integer> readyNotification = Observable.just(42).delay(1, TimeUnit.SECONDS);
Observable delayedNetwork = network.zipWith(readyNotification, 
                                                (response, notUsed) -> response);

使用Observable.concatEager()

它允许您强制一个流完成另一个(concat运算符),但也可以立即启动网络请求,而不必等待第一个参数observable完成(concatEager):

Observable<Response> responseObservable = ...;

Observable<Response> responseWithMinDelay = Observable.concatEager(
                    Observable.timer(1, TimeUnit.SECONDS).ignoreElements(),
                    responseObservable
).cast(Response.class);

它看起来像Observable.zip是一种合理的方法,它似乎运行良好,直到发出错误; 然后它没有等待预期的时间。

这似乎对我有用:

Observable.mergeDelayError(
        useCase.execute(), // can return Unit or throw error
        Observable.timer(1, TimeUnit.SECONDS)
)
.reduce { _, _ -> Unit }
.doOnError { /* will wait at least 1 second */ }
.subscribe { /* will wait at least 1 second */ }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM