-
Notifications
You must be signed in to change notification settings - Fork 408
/
VariableAmountOfNetworkRequestsViewModel.kt
44 lines (40 loc) 路 1.68 KB
/
VariableAmountOfNetworkRequestsViewModel.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package com.lukaslechner.coroutineusecasesonandroid.usecases.coroutines.usecase4
import androidx.lifecycle.viewModelScope
import com.lukaslechner.coroutineusecasesonandroid.base.BaseViewModel
import com.lukaslechner.coroutineusecasesonandroid.mock.MockApi
import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll
import kotlinx.coroutines.launch
class VariableAmountOfNetworkRequestsViewModel(
private val mockApi: MockApi = mockApi()
) : BaseViewModel<UiState>() {
fun performNetworkRequestsSequentially() {
uiState.value = UiState.Loading
viewModelScope.launch {
try {
val recentVersions = mockApi.getRecentAndroidVersions()
val versionFeatures = recentVersions.map { androidVersion ->
mockApi.getAndroidVersionFeatures(androidVersion.apiLevel)
}
uiState.value = UiState.Success(versionFeatures)
} catch (exception: Exception) {
uiState.value = UiState.Error("Network Request failed")
}
}
}
fun performNetworkRequestsConcurrently() {
uiState.value = UiState.Loading
viewModelScope.launch {
try {
val recentVersions = mockApi.getRecentAndroidVersions()
val versionFeatures = recentVersions
.map { androidVersion ->
async { mockApi.getAndroidVersionFeatures(androidVersion.apiLevel) }
}.awaitAll()
uiState.value = UiState.Success(versionFeatures)
} catch (exception: Exception) {
uiState.value = UiState.Error("Network Request failed")
}
}
}
}