RxJava可观察的最小执行时间



我有一个可观察对象(从网络获取数据)。问题是,根据网络条件,可观察性可以快或慢。

我在可观察对象执行时显示进度小部件,在可观察对象完成时隐藏它。当网络是快速的-进度闪烁(出现和消失)。我想把observable的最小执行时间设置为1秒。我该怎么做呢?

"Delay"操作符不是一个选项,因为它即使在慢速网络也会延迟。

您可以使用Observable.zip()。鉴于

Observable<Response> network = ...

One can do

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 */ }

相关内容

  • 没有找到相关文章

最新更新