を使用して、API 呼び出しにキャッシュとネットワーク戦略を実装しようとしていますKotlin
Flows
。これが私が今試していることです
flowOf(
remoteDataSource.getDataFromCache() // suspending function returning Flow<Data>
.catch { error -> Timber.e(error) },
remoteDataSource.getDataFromServer() // suspending function returning Flow<Data>
).flattenConcat().collect {
Timber.i("Response Received")
}
ここでの問題は、戻ったcollect
ときにのみ呼び出されgetDataFromServer
ます。私の期待は、キャッシュから最初のイベントを取得し、数ミリ秒後にサーバーから 2 番目のイベントを取得することです。この場合"Response Received"
、2回印刷されますが、すぐに次々と印刷されます。
この他のバリアント"Response Received"
では、返品後に一度だけ印刷されgetDataFromServer()
ます。
remoteDataSource.getDataFromCache() // suspending function returning Flow<Data>
.catch { error -> Timber.e(error) }
.flatMapConcat {
remoteDataSource.getDataFromServer() // suspending function returning Flow<Data>
}
.collect {
Timber.i("Response Received")
}
以前は RxJava を使用しFlowable.concat()
ていましたが、完全に機能していました。Kotlin Flows にその動作をエミュレートできるものはありますか?