Я знаю, что если Observable отправляет часть данных, он повторно подписывается, а если Observable отправляет уведомление onError, он передает это уведомление наблюдателю и завершает работу. Проблема в том, что если я испущу Obervable.just (1,2), но он не будет принят наблюдателем. Итак, в чем его использование? Он просто сообщает ему о повторной подписке , и неважно, какие данные я испускают?
Observable.just(1, "2", 3)
.cast(Integer.class)
.retryWhen(new Function<Observable<Throwable>, ObservableSource<Integer>>() {
@Override
public ObservableSource<Integer> apply(Observable<Throwable> throwableObservable) throws Exception {
return Observable.just(4,5);
}
})
.subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
Log.i(TAG, "retryWhen重试数据"+integer);
}
});
и журнал
retryWhen 重 试 数据 1
retryWhen 重 试 数据 1
так что Observable.just (4,5) пропал?




Вы можете проверить этот пример из документации, чтобы лучше понять, как должна работать retryWhen (источник: http://reactivex.io/RxJava/javadoc/io/reactivex/Observable.html#retryWhen-io.reactivex.functions.Function-):
Observable.create((ObservableEmitter<? super String> s) -> {
System.out.println("subscribing");
s.onError(new RuntimeException("always fails"));
}).retryWhen(attempts -> {
return attempts.zipWith(Observable.range(1, 3), (n, i) -> i).flatMap(i -> {
System.out.println("delay retry by " + i + " second(s)");
return Observable.timer(i, TimeUnit.SECONDS);
});
}).blockingForEach(System.out::println);
Выход:
subscribing
delay retry by 1 second(s)
subscribing
delay retry by 2 second(s)
subscribing
delay retry by 3 second(s)
subscribing
Я рад, что смог помочь;)
Да, я могу неправильно понять значение этого оператора, и теперь я немного знаю об этом, спасибо!