簡體   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