第二个端点仅返回类型列表,但我需要添加类型
All
并添加产品总数`
因此看起来像: - >端点呼叫产品列表:返回所有产品的JSON - >端点呼叫类型列表:返回所有类型。 当收到所有类型时,我在列表开头添加了所有类型并计算产品数量。因此,我需要在调用另一个端点之前进行第一个端点调用。我为初始化做了这种方式:
private var listOfProducts: List<Product> = emptyList()
private var listOfTypes: List<Type> = emptyList()
private var selectedType: String = ""
init {
fetchProducts()
fetchTypes()
}
fun fetchProducts() {
viewModelScope.launch {
API_CALL {
listOfProducts = response
}
}
}
fun fetchTypes() {
viewModelScope.launch {
API_CALL {
nb_films = listOfProducts.count()
listOfTypes = Type("all", nb_films) + response
}
}
}
因此,代码并不完美,但这只是总结一下问题。
我需要将来自提取物中的信息使用到fetchtypes中。在某些情况下,由于获取数据的延迟而失败了。任何想法如何阻止fetchtypes的触发器或进行2个调用,但要等待一个在处理数据之前结束一个
您的API调用同时运行,导致FetchTypes()有时会使用空列表。
一种解决方案是使用状态流来反应链接呼叫并保证顺序:
// ViewModel
private val _products = MutableStateFlow<List<Product>>(emptyList())
val products: StateFlow<List<Product>> = _products
private val _types = MutableStateFlow<List<Type>>(emptyList())
val types: StateFlow<List<Type>> = _types
init {
viewModelScope.launch {
// 1. Fetch products first
_products.value = api.getProducts()
// 2. Fetch types AFTER products are loaded
val typesResponse = api.getTypes()
val allType = Type("All", _products.value.size) // Use product count
_types.value = listOf(allType) + typesResponse
}
}
这种方式