RxJava在空时发出错误

时间:2017-01-01 17:24:59

标签: exception error-handling rx-java rx-java2

我想"扔"如果Observable在完成之前没有发出一个值,则会出现自定义错误。

让我试着展示一个例子:

Observable<SomeClass> stream = ...

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

所以我有一个SomeClass对象流。如果fitler()没有恰好发出一个元素,我想发出自定义错误。

1 个答案:

答案 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()