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)