Abhishek Bansal
02/12/2020, 4:49 PMflowOf(
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")
}
my expectation here was that I will get first result first and then second after sometime as response comes from server. But the problem here is collect only gets called after server returns result.louiscad
02/12/2020, 9:04 PMflowOf
cannot be called before its parameters are evaluated, which here, suspends. You probably want to use flow { emit(data) }
instead.Abhishek Bansal
02/13/2020, 6:23 AMObservable.concat()
?louiscad
02/13/2020, 7:47 AMAbhishek Bansal
02/13/2020, 7:49 AMflow {
remoteDataSource.getDataFromCache()
.catch { error -> Timber.e(error) }
.onCompletion {
remoteDataSource.getDataFromServer()
.collect {
emit(it)
}
}.collect { emit(it) }
}
Abhishek Bansal
02/13/2020, 7:50 AMconcat
like operator available in Flow for this.