一旦将数据保存到数据库的协程完成,我想将livedata bool(boolean) 标志设置为true。我当前的代码如下:
在ViewModel中:
private suspend fun updatePlace(eventId: Long, placeName: String, placeAddress: String) {
withContext(Dispatchers.IO) {
repository.updatePlace(placeName, placeAddress)
}
}
fun savePlace(placeName: String, placeAddress: String) {
val eventId = event.value!!.eId
uiScope.launch {
updatePlace(eventId, placeName, placeAddress)
}
//flag is currently set regardless of if the updatePlace function is completed
_currentPlaceUpdated.value = true
}
我一直在阅读有关异步并等待协程的信息,但还没有弄清楚在updatePlace()函数完成后如何设置_currentPlaceUpdated的值。
最佳答案
只需将完成任务放在updatePlace
调用之后即可。
uiScope.launch {
updatePlace(eventId, placeName, placeAddress)
_currentPlaceUpdated.value = true
}
withContext
与scope.async(Dispatchers.IO) { /* Code */ }.await()
相似,但对返回值的传递进行了一些优化。withContext
暂停当前调用的协程,直到其内部(代码块)完成。 launch
的作用是启动协程并让下一个代码执行,这就是为什么立即调用它的原因。