我有一个对应ViewModel
的屏幕.此屏幕是要填写的表格,然后记录在Room
数据库中.
每次插入后,还必须相应地更新其他一些表.
我的存储库中有以下函数:
suspend fun writeTransactionToDatabase(transaction: Transaction) {
db.withTransaction { // <-- "magic" solution
transactionDao.insert(transaction)
updateCategoryAndValue(transaction)
updateBalance(transaction)
}
}
其中,updateCategoryAndValue
和updateBalance
都是suspend
个函数.
我从我的视图模型中调用此函数,并立即导航离开.我的理解是,这意味着视图模型已被销毁.
由于我是这样调用此方法的:
viewModelScope.launch {
repository.writeTransactionToDatabase(transaction)
}
我假设这意味着当视图模型被 destruct 时,函数被 destruct .然而,通过添加withTransaction
,这个错误似乎被修复了.
我想知道取消在这种情况下是如何工作的,如果房间已经开始并且withTransaction
使其成为原子的,那么房间是否继续当前的事务,所以它现在以某种方式结束了?
我在调试器中运行了这个函数,如果没有它,该函数似乎在第三个被调用的函数体(即updateBalance()
)中途被取消.当我添加withTransaction
时,用户界面没有显示,该功能似乎一直持续到终止.
有人能解释一下这是怎么回事吗?先谢谢你.