2017-09-11 9 views
0

다음 결과에 내 샘플 코드입니다, 그것은 괜찮RxJava/RxAndroid가 : 오류가 발생한 후 범위 루프를 계속

Observable.range(0, 10) 
    .flatMap(actNumber -> { 
     if (actNumber == 3) { 
      return Observable.error(new Throwable("This is an error")); 
     } 
     return Observable.just(actNumber); 
     }) 
    .onErrorReturnItem(-1) 
    .subscribe(new Consumer<Integer>() { 
     @Override 
     public void accept(Integer number) throws Exception { 
      Logs.d("number -> " + number); 
     } 
    }, new Consumer<Throwable>() { 
     @Override 
     public void accept(Throwable throwable) throws Exception { 
      Log.d("RX", "Error: " + throwable.toString()); 
     } 
    }); 

0, 1, 2, -1

하지만 어떻게 이 결과를 위해 그것을 설정할 수 있습니까?

0, 1, 2, -1, 4, 5, 6, 7, 8,

9 번 관찰 contract에 의하면, 관찰 가능한 로버트

답변

1

감사 onError 또는 onCompleted을 방출하면 Observable 신호에 의해 더 이상 요소가 방출되지 않습니다. 당신이 가지고있는 문제는 3 인 경우 onErrorConsumer에 내고 신호를 종료하면 Observable.error()을 반환한다는 것입니다.

계약을 통해 오류가 발생한 후에도 신호를 계속 수신 할 수 없습니다. 그러나 당신이 할 수있는 것은 오류를 잡아서 복구하고 새로운 Observable 신호를 반환하기 시작하는 것입니다. 운영자의 설명서는 be found here입니다. 여기

은 예입니다

Observable 
    .error(new Throwable("error")) 
    .catchErrorResumeNext(Observable.range(3, 10)) 

(참고 :이 코드를 테스트하지 못했지만, 그것은 바로 당신을 가리켜 야합니다