2016-11-03 1 views
0

У меня возникла проблема, чтобы получить остальную часть элементов из наблюдаемого после того, как вы выбрали исключение. Предположим, что у меня есть 10 элементов для испускания, во втором элементе я выдаю исключение, а мой подписчик onError получил вызванное исключение, после чего выйдут остальные 8 элементов. Как я могу продолжать излучать остальные 8 элементов моему подписчику (onNext) здесь? ThanksRxNetty как использовать onErrorResumeNext

ответ

0

Является ли источник, испускающий 10 элементов, испускающих ошибку или какой-либо оператор между ними? Если источник испускает ошибку, то возобновление должно быть встроено в источник, так как не существует явного контракта в RxJava для возобновления. Если между ними есть оператор, который испускает ошибку, то эта ошибка должна быть подавлена ​​чем-то вроде onErrorResumeNext(). Взгляд на код упрощает комментирование.

0

Использование onErrorResumeNext, чтобы сообщить вашему конвейеру, что испускать в случае исключения. Выбирает этот пример тестирования модуля.

@Test 
public void observableOnErrorResumeException() { 
Integer[] numbers = {0, 1, 2, 3, 4, 5}; 

Observable.from(numbers) 
     .doOnNext(number -> { 
      if (number > 3) { 
       try { 
        throw new IllegalArgumentException(); 
       } catch (Exception e) { 
        throw new RuntimeException(e); 
       } 
      } 

     }) 
     .onErrorResumeNext(t -> Observable.just(666)) 
     .subscribe(System.out::println); 

}

Этот код напечатает

0 
1 
2 
3 
666 

Вы можете увидеть больше примеров здесь https://github.com/politrons/reactive

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