RxJava Observable最短执行时间

时间:2016-06-27 19:10:09

标签: java rx-java reactivex

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

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

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

3 个答案:

答案 0 :(得分:5)

您可以使用Observable.zip()。给定

Observable<Response> network = ...

可以做到

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

答案 1 :(得分:1)

使用text-align: center

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

Observable.concatEager()

答案 2 :(得分:0)

它看起来像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 */ }