7

Observable如果 an在完成之前没有发出恰好一个值,我想“抛出”自定义错误。

让我试着举一个例子:

Observable<SomeClass> stream = ...

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

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

4

1 回答 1

13

由于如果源不发出任何项目就会.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)before来处理singleOrError()

于 2017-01-02T13:51:39.900 回答