0
我訂閱熱可觀察,然後應用timeout
運營商,但我不想取消訂閱TimeoutException
時,只產生特殊項目(我知道源將最終發出新的項目)。我怎樣才能做到這一點?RxJava超時沒有退訂源
我試圖結合超時與onErrorReturn
但這又導致onComplete
呼叫用戶。
我訂閱熱可觀察,然後應用timeout
運營商,但我不想取消訂閱TimeoutException
時,只產生特殊項目(我知道源將最終發出新的項目)。我怎樣才能做到這一點?RxJava超時沒有退訂源
我試圖結合超時與onErrorReturn
但這又導致onComplete
呼叫用戶。
發佈,超時和重試(改編自my older answer):
Observable<Long> source =
Observable.just(100L, 200L, 500L, 1000L, 5000L, 5500L, 6000L)
.flatMap(v -> Observable.timer(v, TimeUnit.MILLISECONDS).map(a -> v));
source.publish(co ->
co.timeout(750, TimeUnit.MILLISECONDS,
Observable.just(-1L)
.concatWith(Observable.error(new RuntimeException()))
)
.retry()
).blockingForEach(System.out::println);
就像一個魅力。在我的情況下,源已經很熱,所以不需要使用發佈。我所缺少的是concatWith()和retry()的組合,這是我認爲的關鍵。 – O10