2017-01-01 75 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

相关问题