我為什么不再推薦用 RxJava
點擊“開發(fā)者技術(shù)前線”,選擇“星標?”
13:21 在看|星標|留言, ?真愛
先講講歷史
再聊聊異步
CompletableFuture。還是后起之秀Kotlin上的Coroutine,還有Android 上官方提供的LiveData(這里說下:雖然本質(zhì)上線程管理仍需用戶自己,但是常見的比如Room數(shù)據(jù)庫,Retrofit等等都有現(xiàn)成的LiveDataAdapter,實際上并不需要我們過多操心線程問題)。相比之下,RxJava優(yōu)勢并不那么明顯,相反劣勢卻很突出。RxJava 門檻太高
投入高,收獲少
你永遠無法預(yù)測你同事的RxJava水平
RxJava的行為并不可預(yù)
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?= 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的思想。總結(jié):RxJava雖然優(yōu)秀,但并不適合所有人
第五階段項目實戰(zhàn)、技術(shù)綜合運用
END 前線推出學(xué)習(xí)交流群,加群一定要備注: 研究/工作方向+地點+學(xué)校/公司+昵稱(如前端+上海+上交+可可) 根據(jù)格式備注,可更快被通過且邀請進群,領(lǐng)取一份專屬學(xué)習(xí)禮包
掃碼加我微信進群,內(nèi)推和技術(shù)交流,大佬們零距離
歷史推薦
5個常用的大數(shù)據(jù)可視化分析工具 棄用 Notepad++!還有 5 款更牛X的編輯器等你! 一頓騷操作!我將 SQL 耗時從 30248.271s 優(yōu)化到 0.001s Vue 3.0 重磅發(fā)布!為什么開發(fā)者依舊偏愛 React? 好文點個在看吧!
評論
圖片
表情


