簡體   English   中英

如何在流中使用來自另一個流數據的數據? (科特林流程)

[英]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) 調用了兩次。

所以我認為我應該使用像zipcombine之類的運算符。

在使用這些運算符時,第二個流如何使用第一個流的數據?

使用combinezip運算符,您不能依賴其他結果。 因此,一般而言,您使用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.

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