Android kotlin 协程从生命周期范围返回对象



我有一个函数getNewProduct它应该返回一个类型为ProductCats的对象。在这个函数中,我调用了一个Async方法,它的原因我应该通过协程范围来调用它。这是代码:

private fun addProductCatAsync(pc: ProductCats) = viewModelScope.async {
withContext(Dispatchers.Default){
productService.addProductCatToServer(pc)
}
}
fun getNewProduct(pc: ProductCats) = viewModelScope.launch{
if (_newProduct.value == null) {
val res = addProductCatAsync(pc).await()
_newProduct.value = res
println("NEW PRODUCT INSIDE COROUTINE: ${_newProduct.value}")
return@launch res
}
return@launch _newProduct.value
}

但是我在编译时从返回行中收到此错误:required: Unit, found: ProductCats?.如何转换getNewProduct函数并使其返回我想要的对象而不是job

试试这个

fun getNewProduct(pc: ProductCats): ProductCats{
label@GlobalScope.launch{
if (_newProduct.value == null) {
val res = addProductCatAsync(pc).await()
_newProduct.value = res
println("NEW PRODUCT INSIDE COROUTINE: ${_newProduct.value}")
return@label res
}
return _newProduct.value
}

GlobalScope.launch will return job object.

如果你想要获取结果,你可以使用异步而不是启动

fun getNewProduct(pc: ProductCats) = viewModelScope.async {
if (_newProduct.value == null) {
val res = addProductCatAsync(pc).await()
_newProduct.value = res
println("NEW PRODUCT INSIDE COROUTINE: ${_newProduct.value}")
}
_newProduct.value
}.await()

最新更新