![](/img/trans.png)
[英]Kotlin Flow : How can i get the cache data from subscription in flow when i have new subscriber?
[英]How can I use data from another flow data in flow? (Kotlin Flow)
我寫的代碼如下。
suspend fun getDataByRegion(): Flow<Result?> {
// getRegion() return Flow<Region>
return getRegion().map { region: Region ->
repository.requestDataFromServer(region)
}
}
問題是 repository.requestDataFromServer(region) 調用了兩次。
所以我認為我應該使用像zip
或combine
之類的運算符。
在使用這些運算符時,第二個流如何使用第一個流的數據?
使用combine
和zip
運算符,您不能依賴其他結果。 因此,一般而言,您使用map
的鏈接方法是可以的。
您有幾種選擇:
假設您的存儲庫方法沒有從其他任何地方調用,它被調用兩次的原因是區域Flow
發出了兩次。 所以試着找出為什么會這樣。
無論如何,如果您的區域Flow
方法兩次返回相同的區域,您可以通過簡單地在getRegion()
.distinctUntilChanged()
來修復它,例如:
getRegion().distinctUntilChanged().map { region: Region -> repository.requestDataFromServer(region) }
它將確保您的區域Flow
不會使用相同的數據重復發射。 或者,如果這始終是預期的行為,則將distinctUntilChanged()
直接添加到存儲庫方法。
問問自己這個方法是否真的需要返回 stream ( Flow
)。 我想您需要一個 stream 因為該區域可以在運行時更改並且您希望應用程序中的某些內容自動更新? 但如果不是,您可以簡單地將 stream 轉換為單個結果:
val region = getRegion().first() repository.requestDataFromServer(region)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.