Какое использование наблюдаемого, испускаемого retrywhen () в rxjava2? - PullRequest
0 голосов
/ 04 декабря 2018

Я знаю, что если Observable испускает часть данных, он повторно подписывается, и если Observable испускает уведомление onError, он передает это уведомление наблюдателю и завершает работу.Проблема в том, что если я испускаю Obervable.just (1,2), но наблюдатель его не примет. Так в чем его использование? Дозируйте, просто скажите об этом повторно, и не важно, какие данные яemit?

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) больше нет?

1 Ответ

0 голосов
/ 05 декабря 2018

Вы можете проверить этот пример из документации, чтобы лучше понять, как должна работать повторная попытка (источник: 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
...