Я пытаюсь реализовать кеш, а затем сетевую стратегию для моего вызова 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
возвращается. Я ожидаю, что я должен получить первое событие из кэша, а затем второе событие с сервера через несколько миллисекунд. В этом случае "Response Received"
печатается дважды, но сразу один за другим.
В этом другом варианте "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")
}
Раньше я использовал Rx Java s Flowable.concat()
, и он работал отлично. Есть ли в потоках Kotlin что-то, что может имитировать такое поведение?