再见! RxJava
开发者技术前线
共 5081字,需浏览 11分钟
·
2020-07-27 19:36
点击“开发者技术前线”,选择“星标?”
在看|星标|留言, 真爱
回复“666”,获取一份专属大礼包
先讲讲历史
再聊聊异步
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虽然优秀,但并不适合所有人
前线推出学习交流一定要备注:研究/工作方向+地点+学校/公司+昵称(如大数据+上海+上交+卡卡),根据格式备注,可更快被通过且邀请进群
扫码加我微信和大佬们零距离
历史推荐 一张900w的数据表,干脆把花费17s执行的SQL优化到300ms了 阿里巴巴微服务架构的四大金刚利器 面试官问我:一个 TCP 连接可以发多少个 HTTP 请求?我竟然回答不上来... 真香!我终于干掉了该死的 if-else... 刷题一个半月,一口气拿下腾讯、华为、Oppo、微软7个大厂offer,字节跳动薪资涨幅60%! 好文点个在看吧!
评论