[英]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.