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