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

时间:2020-02-15 10:46:01

标签: 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

2 个答案:

答案 0 :(得分:0)

尝试一下

int64_t

答案 1 :(得分:0)

如果要取得结果,可以使用异步代替启动

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()