J'ai un code qui zippe deux requêtes réseau via RxJava:
Single.Zip(repository.requestDate(), repository.requestTime()) {
date, time -> Result(date, time)
}
cela signifie que repository.requestDate()
/repository.requestTime()
renvoie Single<T>
Si je veux utiliser Coroutines, je dois changer les demandes en:
@GET('link/date')
suspend fun requestDate() : Date
@GET('link/time')
suspend fun requestTime() : Time
Mais, Comment puis-je compresser les demandes via Flow depuis Kotlin Coroutines?
Je sais que je peux le faire comme ceci:
coroutineScope {
val date = repository.requestDate()
val time = repository.requestTime()
Result(date, time)
}
Mais je veux le faire via Flow!
Je connais les canaux, mais Channels.Zip()
est obsolète.
Pour la plupart des opérations, Flow
suit les mêmes règles que les co-routines normales, donc pour compresser deux requêtes distinctes, vous devez appliquer modèle de concurrence asynchrone .
En pratique, cela finira par ressembler à ceci:
flow {
emit(coroutineScope/withContext(SomeDispatcher) {
val date = async { repository.requestDate() }
val time = async { repository.requestTime() }
Result(date.await(), time.await())
}}
}