RxJava 在空时发出错误
RxJava emit error on empty
我想 "throw" 如果 Observable
在完成前没有准确发出一个值,我想自定义错误。
让我举个例子:
Observable<SomeClass> stream = ...
stream
.filter(...)
.singleOrError(new MyCustomException())
所以我有一个 SomeClass 对象流。如果 fitler()
不完全发出一个元素,我想发出自定义错误。
由于 .singleOrError()
抛出 NoSuchElementException
如果源不发出任何项目,您可以检查抛出异常的实例和 return 您的自定义异常。
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)
我想 "throw" 如果 Observable
在完成前没有准确发出一个值,我想自定义错误。
让我举个例子:
Observable<SomeClass> stream = ...
stream
.filter(...)
.singleOrError(new MyCustomException())
所以我有一个 SomeClass 对象流。如果 fitler()
不完全发出一个元素,我想发出自定义错误。
由于 .singleOrError()
抛出 NoSuchElementException
如果源不发出任何项目,您可以检查抛出异常的实例和 return 您的自定义异常。
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)