首页 > 解决方案 > 在 RxJava/RxKotlin 中,返回 Completable.error(Exception()) 和抛出有什么区别?

问题描述

以下情况有什么区别:

fun a(params: String) = Completable.fromAction {
        if (params.isEmpty()) {
            throw EmptyRequiredFieldException() 
        }
    }

VS

fun b(params: String) = if(params.isEmpty()) 
       Completable.error(EmptyRequiredFieldException()) 
else 
       Completable.complete()

特别是在 android 的上下文中,如果它很重要(即使我认为它不重要)谢谢!

标签: error-handlingkotlinobservablerx-java2rx-kotlin

解决方案


根据文件

如果 Action 抛出异常,则通过 CompletableObserver.onError(Throwable) 将相应的 Throwable 传递给下游,除非下游已处置此 Completable 源。在后一种情况下,Throwable 通过 RxJavaPlugins.onError(Throwable) 作为 UndeliverableException 传递给全局错误处理程序。

因此,您描述的两种方式都是相似的(除非下游已处置)。请注意,第一种方法(手动抛出异常)允许修改Completable运行时的行为。第二个 - 静态定义为您返回特定类型Completable并且无法修改它。

选择什么取决于您的需求。


推荐阅读