我想"扔"如果Observable
在完成之前没有发出一个值,则会出现自定义错误。
让我试着展示一个例子:
Observable<SomeClass> stream = ...
stream
.filter(...)
.singleOrError(new MyCustomException())
所以我有一个SomeClass对象流。如果fitler()
没有恰好发出一个元素,我想发出自定义错误。
答案 0 :(得分:5)
由于.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()
中处理,也可以在take(1)
之前简单地添加singleOrError()
。