2016-04-07 6 views
2

Я пытаюсь разрешить бесконечный поток как на следующих, так и на ошибках.RxJava допускает множественные вызовы onError

В приведенном ниже коде используется метод retry(), который, как я предполагал, позволит мне увидеть все 3 вызова onNext, однако после ошибки ничего не вызывается.

public class TesterClass { 
​ 
    public static void main(final String[] args) { 
     final PublishSubject<Void> publishSubject = PublishSubject.create(); 
​ 
     publishSubject 
       .retry() 
       .subscribe(
         aVoid -> System.out.println("onNext"), 
         Throwable::printStackTrace, 
         () -> System.out.println("onComplete") 
       ); 
​ 
     publishSubject.onNext(null); 
     publishSubject.onNext(null); 
     publishSubject.onError(new Exception("onError")); 
     publishSubject.onNext(null); 
    } 
} 

Мой идеальный случай использования позволит мне подписаться и принять меры на все ошибки и все последующие вызовы от субъекта/наблюдаемым.

Я также попытался реализовать решение с использованием пользовательского Operator, как показано на рисунке here, но мне тоже не повезло.

Возможно ли достичь того, что я собираюсь сделать, или же дизайн RxJava's onError, нарушающий цепочку, полностью блокирует эту идею.

ответ

5

Как уже упоминалось в этой теме (Rxjava discussion), этого не может быть сделано.

Оберните ошибку в сообщение через OnNext, если ошибка не должна прерывать поток.

Смежные вопросы