Rx java 如何重放可观察的?

Rx java 如何重放可观察的?,rx-java,Rx Java,我有以下代码: Observable<Contact> phoneContactsObservable = Observable.create(new Observable.OnSubscribe.... ReplaySubject subject = ReplaySubject.create(); phoneContactsObservable.subscribe(subject) Observable.combineLatest(subject,(PublishSubject&l

我有以下代码:

Observable<Contact> phoneContactsObservable = Observable.create(new Observable.OnSubscribe....
ReplaySubject subject = ReplaySubject.create();
phoneContactsObservable.subscribe(subject)
Observable.combineLatest(subject,(PublishSubject<List>) getContacts(), new Func2<....).subscribe()
Observable.combineLatest(subject,(PublishSubject<List>)getFBContacts(), new Func2<....).subscribe()
Observable-phone-contactsobservable=Observable.create(新建Observable.OnSubscribe…)。。。。
ReplaySubject subject=ReplaySubject.create();
PhoneContactsBServable.subscribe(主题)

Observable.CombineTest(subject,(PublishSubject)getContacts(),new Func2您有指向Observable(
doOn…
)的钩子-比如
doOnError
DoOnInterminate
,甚至
doOnSubscribe
(我会尝试使用它,但不会导致错误)

这就是说,中有一个使用延迟模式进行简单重试的示例。请注意,它不会在同一个元素上重试,而是通过重新订阅可观察元素在下一个元素上重试:

Observable.create((Subscriber<? 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);
      });
  }).toBlocking().forEach(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