11package com.hoc081098.paginationmviflow.ui.main
22
33import android.util.Log
4+ import com.hoc081098.paginationmviflow.domain.entity.Photo
5+ import com.hoc081098.paginationmviflow.domain.entity.Post
46import com.hoc081098.paginationmviflow.domain.usecase.GetPhotosUseCase
57import com.hoc081098.paginationmviflow.domain.usecase.GetPostsUseCase
68import com.hoc081098.paginationmviflow.ui.main.MainContract.PartialStateChange.PhotoFirstPage
@@ -10,7 +12,9 @@ import com.hoc081098.paginationmviflow.ui.main.MainContract.PartialStateChange.P
1012import com.hoc081098.paginationmviflow.ui.main.MainContract.PartialStateChange.Refresh
1113import com.hoc081098.paginationmviflow.ui.main.MainContract.PhotoVS
1214import com.hoc081098.paginationmviflow.ui.main.MainContract.PostVS
15+ import kotlinx.coroutines.Deferred
1316import kotlinx.coroutines.async
17+ import kotlinx.coroutines.awaitAll
1418import kotlinx.coroutines.coroutineScope
1519import kotlinx.coroutines.flow.Flow
1620import kotlinx.coroutines.flow.catch
@@ -74,13 +78,15 @@ class MainInteractorImpl @Inject constructor(
7478 limitPhoto : Int
7579 ): Flow <Refresh > = flow {
7680 coroutineScope {
77- val async1 = async { getPostsUseCase(limit = limitPost, start = 0 ) }
78- val async2 = async { getPhotosUseCase(limit = limitPhoto, start = 0 ) }
81+ val async1: Deferred <List <Post >> = async { getPostsUseCase(limit = limitPost, start = 0 ) }
82+ val async2: Deferred <List <Photo >> = async { getPhotosUseCase(limit = limitPhoto, start = 0 ) }
83+ val results = awaitAll(async1, async2)
7984
85+ @Suppress(" UNCHECKED_CAST" )
8086 emit(
8187 Refresh .Success (
82- posts = async1.await( ).map(::PostVS ),
83- photos = async2.await( ).map(::PhotoVS )
88+ posts = (results[ 0 ] as List < Post > ).map(::PostVS ),
89+ photos = (results[ 1 ] as List < Photo > ).map(::PhotoVS )
8490 ) as Refresh
8591 )
8692 }
0 commit comments