error-handling - 在 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 的上下文中,如果它很重要(即使我认为它不重要)谢谢!
解决方案
根据文件,
如果 Action 抛出异常,则通过 CompletableObserver.onError(Throwable) 将相应的 Throwable 传递给下游,除非下游已处置此 Completable 源。在后一种情况下,Throwable 通过 RxJavaPlugins.onError(Throwable) 作为 UndeliverableException 传递给全局错误处理程序。
因此,您描述的两种方式都是相似的(除非下游已处置)。请注意,第一种方法(手动抛出异常)允许修改Completable
运行时的行为。第二个 - 静态定义为您返回特定类型Completable
并且无法修改它。
选择什么取决于您的需求。
推荐阅读
- amazon-web-services - Cloudfront 不使用斜杠重定向
- drupal - 在内容类型中管理显示的目的是什么?
- c++ - 当我尝试使用 mingw 使用带有 SFML 库的 CMake 编译项目时出错
- javascript - 无法在启用 Ivy 的情况下编译 Angular 应用程序
- python - Python:如何将多个列表组合成一个列表,不使用库
- r - 如何按组制作情节
- javascript - 添加的文本字符串不显示在无序列表中
- c# - 将 sqlite3 数据库复制到用户文件夹并加载数据库导致应用程序在 WACK 验证期间无法启动
- excel - 选择差异较大或等于 1 的日期
- python - Cartopy 投影上的叠加线,线上有 n 个点