android - 如何让 RxKotlin 编写的这段代码更干净,避免阻塞线程?
问题描述
我有这个函数,它获取一个参数并首先检查它的值。如果它为 null,则从返回 Single<String> 的 fisrtFun() 的结果中获取其值。
之后,无论该参数是否为空,它都会返回 secondFun() 的结果,该结果将该参数作为输入
fun getUserEvents(id: String?): Single<String> {
return if (userId == null) {
firstFun().flatMap { id->
secondFun(id)
}
} else {
secondFun(id)
}
}
但正如你所见,我使用了 if-else 块并多次编写了 secondFun()
所以我试着让它更干净
fun getUserEvents(id: String?): Single<String> {
val id = userId ?: fisrtFun().blockingGet()!!
return secondFun(id)
}
我想知道是否有更好的方法来实现这个功能而不使用blockingGet()来避免阻塞线程
解决方案
像这样的东西应该工作:
fun getUserEvents(id: String?): Single<String> {
val idSingle = if (userId == null) firstFun() else Single.just(id)
return idSingle.flatMap { id ->
secondFun(id)
}
}
推荐阅读
- apache - Apache HTTPD:如何正确设置虚拟主机
- python - 如何将 API 来源的字符串 Unicode 转换为 UTF-8
- python - 使用 src 和测试目录运行 pytest 时导入错误
- c# - ASP.NET MVC 应用程序在生产中发布后无法正常工作
- reactjs - React Jest 测试:模拟这个自定义 React 钩子
- python - 在pytest中执行的UI测试中发送请求后如何从Web套接字的响应中保存数据
- javascript - 使用 ajax javascript 检查 HH:MM 格式的字段值
- r - R中的不规则形状网格(ggplot)
- android - 无法在 Android Studio 上启动模拟器 - 无法找到 adb err
- r - 我正在尝试对 R 进行逻辑回归并收到此错误