Я пытаюсь сделать Observable
и использую retryWhen
(поэтому я буду повторять только при определенных исключениях).Я сделал это так:
private void test() {
Observable.just("something").**map**( x -> {
return Observable.error(new Exception("error"));
}).retryWhen(notification -> notification.zipWith(Observable.range(1, 4), Pair::create)
.flatMap(exception ->{
if(exception.getThrowable() instanceof IOException){
// Do Something
return Observable.timer(1, TimeUnit.SECONDS);
}
return Observable.error(new Exception("error"));
})
).subscribeOn(Schedulers.io()).subscribe(payload -> {
//something
});
}
Pair
- это объект с двумя полями: бросаемым и длинным.
После многих неудачных тестов, когда моя повторная попытка не работала, я изменил map
на flatMap
, теперь это работает.
Я не понимаю, почему это, кто-то может мне объяснить?и можно ли как-нибудь переместить его на карту?