나는 하루 동안이 일에 매달 렸습니다. 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 밀리 초일 때, 더 오랜 시간 동안 (즉, 1 초), 그것은 단 한 번의 홀수 또는 짝수 번을 방출하면서 한 번 실행됩니다. 나는 틀린 일을하고 있다고 확신하지만, 그것이 무엇인지는 알 수 없다.