Error handling 在RxJava/RxKotlin中,返回Completable.error(Exception())和抛出?

Error handling 在RxJava/RxKotlin中,返回Completable.error(Exception())和抛出?,error-handling,kotlin,observable,rx-java2,rx-kotlin,Error Handling,Kotlin,Observable,Rx Java2,Rx Kotlin,以下情况的区别是什么: fun a(params: String) = Completable.fromAction { if (params.isEmpty()) { throw EmptyRequiredFieldException() } } VS 特别是在android的环境中,如果它重要的话(尽管我不认为它重要) 谢谢 根据 如果该操作引发异常,则通过CompletableObserver.onError(Throwa

以下情况的区别是什么:

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

特别是在android的环境中,如果它重要的话(尽管我不认为它重要) 谢谢

根据

如果该操作引发异常,则通过CompletableObserver.onError(Throwable)将相应的Throwable传递给下游,除非下游处理了此CompletableSource。在后一种情况下,Throwable作为不可交付的异常通过RxJavaPlugins.onError(Throwable)传递给全局错误处理程序

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


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

这意味着,在第一种情况下,如果用户被释放(如果我使用默认的全局错误处理程序),应用程序将崩溃,而在第二种情况下,它不会崩溃?我想,是的。RxJava 2.1.1在SingleEmitter上引入了一个实验性的tryOnError(t:Throwable)方法。它的文档说:“如果下游*没有取消序列或以其他方式终止,则尝试发出指定的{@code Throwable}错误,如果由于生命周期限制不允许发出,则返回false。**与{@link#onError(Throwable)}不同,{@code RxJavaPlugins.onError}所以我不知道这和你说的有什么关系。在我看来,除了tryOnError()之外,两者的行为都是一样的,但是如果是这样的话,如果在一个错误发生之前进行处理,那么之前的一切都会崩溃?如果用户(例如)在返回错误之前导航离开,我如何安全地忽略网络错误?这真令人困惑。
fun b(params: String) = if(params.isEmpty()) 
       Completable.error(EmptyRequiredFieldException()) 
else 
       Completable.complete()