我为什么不再推荐用 RxJava
开发者技术前线
共 5059字,需浏览 11分钟
·
2020-12-17 00:38
点击“开发者技术前线”,选择“星标?”
13:21 在看|星标|留言, 真爱
先讲讲历史
再聊聊异步
CompletableFuture
。还是后起之秀Kotlin上的Coroutine
,还有Android 上官方提供的LiveData
(这里说下:虽然本质上线程管理仍需用户自己,但是常见的比如Room数据库,Retrofit等等都有现成的LiveDataAdapter,实际上并不需要我们过多操心线程问题)。相比之下,RxJava优势并不那么明显,相反劣势却很突出。RxJava 门槛太高
投入高,收获少
你永远无法预测你同事的RxJava水平
RxJava的行为并不可预
map
和flatMap
的区别。还有flatMap
和concatMap
的区别。简单的讲map
是一对一,flatMap
是一对N的map然后在进行flatten
操作。还有些教程直接写出flatMap
无序,concatMap
有序。其实这些都只是简单总结,而实际的行为照着相差甚远。比如flatMap
在第一个error的时候会不会继续继续触发第二个?如果我想继续,将如何操作?再比如concatMap
在遇到第一个Observable
不会中断的时候,怎么继续下一个?RxJava太容易出错
with great power comes great responsibility. RxJava就是这样。在简单易用的同时他太容易被滥用了。我在实际工作中碰到的例子:
val stationId = "5bCP6Iqx"
val statoin:Observable= staionRepo.getStationById(stationId)
val stationLine:Observable= station.flatMap{station ->stationRepo.getLine(station)}
return Observable.merge(station.map{it.toUiModel()},
stationLine.map{it.toUiModel()})
val stationId = "5bCP6bif"
val statoin:Observable= staionRepo.getStationById(stationId)
return station.publish{selector ->
Observable.merge(selector.map{it.toUiModel()},
selector.flatMap{station -> stationRepo.getLine(station)}
.map{it.toUiModel()})
}
RxJava还是过于理想化了
RxJava起于异步,却也不单单是异步
LiveData
。而LiveData
无疑也是大量借鉴了RxJava的思想。总结:RxJava虽然优秀,但并不适合所有人
第五阶段项目实战、技术综合运用
END 前线推出学习交流群,加群一定要备注: 研究/工作方向+地点+学校/公司+昵称(如前端+上海+上交+可可) 根据格式备注,可更快被通过且邀请进群,领取一份专属学习礼包
扫码加我微信进群,内推和技术交流,大佬们零距离
历史推荐
5个常用的大数据可视化分析工具 弃用 Notepad++!还有 5 款更牛X的编辑器等你! 一顿骚操作!我将 SQL 耗时从 30248.271s 优化到 0.001s Vue 3.0 重磅发布!为什么开发者依旧偏爱 React? 好文点个在看吧!
评论