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