RxJava在空时发出错误

Rai*_*ipe 4 error-handling exception rx-java rx-java2

如果Observable在完成之前没有发出一个值,我想"抛出"自定义错误.

让我试着举个例子:

Observable<SomeClass> stream = ...

stream
.filter(...)
.singleOrError(new MyCustomException())
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*yev 8

由于.singleOrError()抛出NoSuchElementException,如果源发射没有物品,可以检查抛出的异常的情况下,回到您的自定义一个.

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

请注意,如果filter()发出多个项目,singleOrError()则会抛出IllegalArgumentException.这可以在之前处理,也可以在之前onErrorResumeNext()简单地添加.take(1)singleOrError()