Android kotlin协程从生命周期范围返回对象
我有一个函数Android kotlin协程从生命周期范围返回对象,android,kotlin,Android,Kotlin,我有一个函数getNewProduct,它应该返回ProductCats类型的对象。在这个函数中,我调用了一个Async方法,我应该通过协程作用域调用它。这是代码: private fun addProductCatAsync(pc: ProductCats) = viewModelScope.async { withContext(Dispatchers.Default){ productService.addProductCatToServer
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,find:ProductCats?
。如何转换getNewProduct
函数并使其返回所需的对象而不是objob
?尝试使用此方法
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): 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()
如果您想要获取结果,可以使用异步启动
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()
除非函数是挂起函数,否则此操作将不起作用。除非函数是挂起函数,否则此操作将不起作用。这将启动作业,然后返回作业开始前
\u newProduct
具有的值。这将启动作业,然后返回作业开始前\u newProduct
具有的值。