почему retryWhen из JavaRx не работает, если ему предшествует карта? - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь сделать 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, теперь это работает.

Я не понимаю, почему это, кто-то может мне объяснить?и можно ли как-нибудь переместить его на карту?

...