0
私は1日このままで立ち往生してきました。 Dan Lew great postに触発され、私はrepeatWhenのための簡単なテストケースを(作ってみました)とretryWhen():RxJava:なぜretryWhen/repeatWhenが動作しないのですか?
public class ObsTest {
private static final Logger LOG = LoggerFactory.getLogger(ObsTest.class);
@Test
public void test1() throws InterruptedException {
Observable<Integer> obs = rx.Observable.<Integer> create(observer -> {
LOG.info("onSubscribe");
Integer data = RandomUtils.nextInt(0, 1000);
if (data % 2 != 0) {
observer.onError(new RuntimeException("Odd number " + data));
} else {
observer.onNext(data);
}
observer.onCompleted();
}, BackpressureMode.BUFFER);
obs.repeatWhen(completed -> completed.delay(1, TimeUnit.MILLISECONDS))
.retryWhen(error -> error.delay(1, TimeUnit.MILLISECONDS))
.subscribe(i -> LOG.info("value={}", i), e -> LOG.info("Exception = {}", e.getMessage()));
}
私の考えでは、これが永遠に実行する必要があり、「正しい」結果として偶数を放出し、奇数は「エラー」とみなされます。 代わりに、これは1つまたは2つのループに対して実行され、その後停止します。そして、それは、遅延が1ミリ秒で、より長い時間(すなわち、1秒)、1回だけ実行され、ちょうど1つの奇数または偶数を発する。 私は何か間違っていると確信していますが、私はそれが何かを見つけることができません。