為什么我不再推薦你用 RxJava ?
讓一部分開發(fā)者看到未來

先講講歷史
再聊聊異步
CompletableFuture。還是后起之秀Kotlin上的Coroutine,還有Android 上官方提供的LiveData(這里說下:雖然本質(zhì)上線程管理仍需用戶自己,但是常見的比如Room數(shù)據(jù)庫,Retrofit等等都有現(xiàn)成的LiveDataAdapter,實際上并不需要我們過多操心線程問題)。相比之下,RxJava優(yōu)勢并不那么明顯,相反劣勢卻很突出。RxJava 門檻太高
投入高,收獲少
你永遠無法預測你同事的RxJava水平
RxJava的行為并不可預
map和flatMap的區(qū)別。還有flatMap和concatMap的區(qū)別。簡單的講map是一對一,flatMap是一對N的map然后在進行flatten操作。還有些教程直接寫出flatMap無序,concatMap有序。其實這些都只是簡單總結(jié),而實際的行為照著相差甚遠。比如flatMap在第一個error的時候會不會繼續(xù)繼續(xù)觸發(fā)第二個?如果我想繼續(xù),將如何操作?再比如concatMap在遇到第一個Observable不會中斷的時候,怎么繼續(xù)下一個?RxJava太容易出錯
with great power comes great responsibility. RxJava就是這樣。在簡單易用的同時他太容易被濫用了。我在實際工作中碰到的例子:
val stationId = "5bCP6Iqx"
val statoin:Observable<Station> = staionRepo.getStationById(stationId)
val stationLine:Observable<StationLine> = station.flatMap{station ->stationRepo.getLine(station)}
return Observable.merge(station.map{it.toUiModel()},
stationLine.map{it.toUiModel()})
val stationId = "5bCP6bif"
val statoin:Observable<Station> = 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的思想。總結(jié):RxJava雖然優(yōu)秀,但并不適合所有人
END 前線推出學習交流一定要備注:研究/工作方向+地點+學校/公司+昵稱(如JAVA+上海+上交+卡卡),根據(jù)格式備注,可更快被通過且邀請進群 掃碼加我微信進群,內(nèi)推和技術(shù)交流,大佬們零距離
歷史推薦
為什么我立刻放棄了 React 而使用 Vue ? 記住看小電影前一定要檢查域名是不是 HTTPS 的! 為什么面試官喜歡問 ZooKeeper 基本原理? Vue 3.0 重磅發(fā)布!為什么開發(fā)者依舊偏愛 React? 好文點個在看吧!
評論
圖片
表情


