[英]How to check if a suspend function has completed executing
您好,我有一個暫停 function updateUserWithNewPersonalDetails()
,我想檢查 function 是否已執行,執行后我想調用success()
function。
我無法在 function 調用中使用invokeOnCompletion
請問我該怎么做,或者在執行updateUserWithNewPersonalDetails
后我可以調用success()
function 的其他方法是什么
暫停 function
suspend fun updateUserWithNewPersonalDetails(details: PersonalDetails) {
userDao.get().collect { cachedUser ->
val updatedCachedUser = UserDB(cachedUser.id, ...)
userDao.save(updatedCachedUser)
}
}
從 viewmodel 我想調用上面的 function 成功或調用成功我想調用成功 function
userRepo.updateUserWithNewPersonalDetails(details). invokeOnCompletion{
success()
}
感謝 R
目前,您的 function updateUserWithNewPersonalDetails
永遠不會完成,因為 Room 返回的Flow
永遠不會完成(它永遠監視數據庫更改)。
假設您只對第一個更改感興趣,您可以執行以下操作:
suspend fun updateUserWithNewPersonalDetails(details: PersonalDetails) {
val cachedUSer = userDao.get().first() // this will get the current value from the DB
val updatedCachedUser = UserDB(cachedUser.id, ...)
userDao.save(updatedCachedUser)
}
這里first()
從數據庫中獲取當前值(如果它不存在則拋出)並且不會永遠觀察。 或者,您可以使用firstOrNull()
。
那么你的另一個 function 就變成了:
updateUserWithNewPersonalDetails()
success()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.