簡體   English   中英

理解反應式

[英]Understanding reactive

最近 kotlin flow 獲得了很多關注。 我以前從未做過任何反應式編程,所以我認為現在是學習它的好時機。 盡管我可以訪問書籍和一些文章,但我無法理解如何將它集成到沒有任何 rxjava 的現有應用程序上。 我試着找一些樣品,但他們給我的唯一東西是非常基本的。 我真的對這種反應式編程的東西感到困惑。 例如,我有一個需要在數據庫中獲取的列表。 為什么我要使用流來獲取這些數據? 如果我將其可視化為流,那么每個數據都會給我一個數據。 而如果我得到那個列表,我可以得到整個列表,如果我使用 flow. 我閱讀了很多關於這個 kotlin 流程的文章,甚至是 rx java。 但是,我仍然想了解為什么使用流以及它與我剛剛給出的示例之類的其他方式有何不同?

例如,我有一個需要在數據庫中獲取的列表。 為什么我要使用流來獲取這些數據?

嗯,這完全取決於您用於訪問該數據庫的內容以及它如何使用Flow

假設您正在使用 Android Jetpack 中的 Room。 在這種情況下,您可以通過suspend函數和Flow兩種方式使用 Kotlin 協程:

@Query("SELECT * FROM stuff")
suspend fun getStuff(): List<Stuff>

@Query("SELECT * FROM stuff")
fun getStuffNowPlusChanges(): Flow<List<Stuff>>

在這兩種情況下,Room 都會在后台線程上執行數據庫 I/O,您可以使用協程在您想要的線程(例如,Android 的主應用程序線程)上獲取結果。 最初,結果將是相同的:您將獲得一個List<Stuff>表示stuff表的當前內容。

不同之處在於數據更改時會發生什么。

suspend函數的情況下,從調用函數的那一刻起,您只會得到一個List<Stuff> 如果更改了stuff表中的數據,則需要安排再次調用該函數。

但是,在Flow返回函數的情況下,如果您在仍然擁有該Flow的觀察者時更改了stuff表中的數據,則觀察者將自動獲得一個新的List<Stuff> 您不需要再次手動調用某個函數——Room 會為您處理。

您必須決定該特定功能是否對您有用。 如果您使用其他東西進行數據庫訪問,您將需要查看它是否支持Flow以及如何使用Flow

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM