简体   繁体   English

从 Kotlin 异步协程返回值

[英]return value from Kotlin async Coroutine

I want to return value from this function which gets data from local database:我想从这个从本地数据库获取数据的 function 返回值:

fun getAllTodo() :  LiveData<List<TodoModel>>{

   viewModelScope.launch(Dispatchers.IO) {

        val data = async { getTodoFromDB() }
        data.await()
    }
}

suspend fun getTodoFromDB(): LiveData<List<TodoModel>> {
    return database.getAll()
}

PS: I am new to Coroutine, might have done something silly. PS:我是 Coroutine 的新手,可能做了一些傻事。 Looking forward for Android community help期待 Android 社区帮助

A value can't be returned from launched coroutine.无法从启动的协程返回值。 If getTodoFromDB() returns LiveData object and is not suspend , just try to call it without launching a coroutine:如果getTodoFromDB()返回LiveData object 并且不是suspend ,只需尝试在不启动协程的情况下调用它:

fun getAllTodo(): LiveData<List<TodoModel>> = getTodoFromDB()

If getTodoFromDB() is suspend you can use liveData builder function:如果getTodoFromDB()suspend ,您可以使用liveData builder function:

val allTodo:  LiveData<List<TodoModel>> = liveData {
   emitSource(getTodoFromDB())
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM