【问题标题】:RxJava emit error on emptyRxJava 在空时发出错误
【发布时间】:2017-05-16 00:06:54
【问题描述】:

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

让我举个例子:

Observable<SomeClass> stream = ...

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

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

【问题讨论】:

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


    【解决方案1】:

    由于 .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() 中处理,或者只需在singleOrError() 之前添加take(1)

    【讨论】:

    • 是的。这样可行。 single().onErrorResumeNext(Single.error(new CustomError())
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-09
    • 2015-10-07
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 2018-12-24
    相关资源
    最近更新 更多