我有一个函数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()