2017-10-19 6 views
0

TimeoutExceptionがスローされたときに私は嫌いではないが、熱い観測可能なものを購読して、timeout演算子を適用しているが、私はソースが最終的に新しいアイテム)。それをどうすれば実現できますか?ソースからの登録を解除しないでRxJavaのタイムアウト

私はonErrorReturnとタイムアウトを組み合わせようとしていますが、これもまたサブスクライバーでonCompleteコールを引き起こします。

答えて

0

は(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); 
+0

作品。私の場合、ソースはすでに熱いので、公開する必要はありません。私が欠けていたのは、concatWith()とretry()の組み合わせで、これは私が思う鍵です。 – O10

関連する問題