2017-01-01 45 views
1

如果在完成之前Observable沒有完全發出一個值,我想「拋出」自定義錯誤。RxJava在空的時候發出錯誤

讓我試圖表明一個例子:

Observable<SomeClass> stream = ... 

stream 
.filter(...) 
.singleOrError(new MyCustomException()) 

所以我有SomeClass的對象流。我想發出自定義錯誤,如果fitler()不只是發出一個元素。

回答

1

由於.singleOrError()拋出NoSuchElementException如果源不發射任何項目,您可以檢查拋出異常的實例並返回您的自定義項目。

stream.filter(...) 
      .singleOrError() 
      .onErrorResumeNext(throwable -> { 
       if (throwable instanceof NoSuchElementException) { 
        return Single.error(new MyCustomException()); 
       } else { 
        return Single.error(throwable); 
       } 
      }); 

注意,如果filter()發出多個項目,singleOrError()將拋出IllegalArgumentException。這可以在onErrorResumeNext()中處理,或者在singleOrError()之前簡單地添加take(1)

+0

Yeap。這樣可行。 single()。onErrorResumeNext(Single.error(new CustomError()) – Raipe