Я изо всех сил пытаюсь понять retryWhen
.
Мой вариант использования следующий:
- У меня есть одна основная наблюдаемая
- Если возникает ошибка, я хочу выполнить другую наблюдаемую (также имеющую другой результат) между
- Если эта вторая наблюдаемая успешна, я хочу повторно выполнить исходную наблюдаемую один раз (если во время первой попытки возникает ошибка, мне не нужна дополнительная повторная попытка)
- Если этот второй наблюдаемый не удался, я хочу передать ошибку подписчику основного наблюдаемого
Как мне это сделать?
Спасибо уже!
ОБНОВЛЕНИЕ
Что я пробовал до сих пор:
public class RetryTest {
private int i = 0;
@Test
public void testRetry() {
Observable
.create((Observable.OnSubscribe<String>) subscriber -> {
if (i == 0) {
i++;
throw new RuntimeException("Main error");
} else {
subscriber.onNext("Main success");
subscriber.onCompleted();
}
})
.retryWhen(observable -> {
// HERE IS WHERE I NEED HELP, i need something like:
Observable.just("Error handling observable")
.subscribe(new Subscriber<String>() {
@Override
public void onCompleted() {
// Do retry ONCE
}
@Override
public void onError(Throwable e) {
// Propagate error
}
@Override
public void onNext(String s) {
// Nothing to do here
}
});
})
.subscribe(new Subscriber<String>() {
@Override
public void onCompleted() {
System.out.println("onCompleted");
}
@Override
public void onError(Throwable e) {
System.out.println("onError: " + e);
}
@Override
public void onNext(String s) {
System.out.println("onNext: " + s);
}
});
}
}