2017-12-12 24 views
0

Observable의 각 항목의 유효성을 검사하고 조건이 실패하면 오류를 반환하는 방법은 무엇입니까?
은 지금은 내부 ifswitchMap를 사용하고 있지만,이 솔루션은 매우 좋은하지 같습니다관찰 할 수있는 각 항목의 유효성 검사

Observable.just(1, 2, 3, -1, 4) 
    .switchMap(x -> { 
     if (x >= 0) { 
      return Observable.just(x); 
     } else { 
      return Observable.error(new Exception("Input value should be positive")); 
     } 
    }) 
    .subscribe(
     x -> System.out.printf("value=%d\n", x), 
     err -> System.out.printf("error: %s\n", err.getMessage()) 
    ); 

내가 대신의 기본 방법을 사용할 수 있습니까?

+0

이 (가) 필터가 아닌가요? –

+0

@PhoenixWang'filter'는 "bad"값을 떨어 뜨리는 반면 예외는 – g4s8

+0

입니다. 1. 필터에 예외를 던질 수 있으며 연산자가 오류를 전달합니다. 2. 반응성 스트림에 대한 구현이 적절하지 않다고 생각합니다. 예외는 더 이상 스트림을 청취/구독 할 수 없다는 것을 의미합니다. Exception 대신 ErrorState를 사용하는 것이 좋습니다. 예를 들어 유효성 검사 결과를 나타내는 값 또는 예외가 포함 된 결과 입니다. @ g4s8 –

답변

1

doOnNext()을 사용하면 예외를 throw 할 수 있습니다.

Observable.just(1, 2, 3, -1, 4) 
     .doOnNext(x -> { 
      if (x < 0) throw Exception("Input value should be positive"); 
     }) 
     .subscribe(
      x -> System.out.printf("value=%d\n", x), 
      err -> System.out.printf("error: %s\n", err.message) 
     );