[英]Coroutine Scope correct implementation with states
我正在使用 MVVM 架構和 Jetpack Compose 制作零售應用程序。
設想。
問題:我正在使用 Coroutine scope 保存並導航到其他屏幕。 我顯示 3 毫秒延遲,如果響應沒有在 3 毫秒出現怎么辦。如果 api 失敗,如何顯示消息。 如何以具體方式做到這一點:請提出建議,因為我需要顯示從保存訪問到下一個保存詳細信息頁面的導航。
DropdownMenu(
expanded = viewModel.isDropdownMenuExpanded,
onDismissRequest = { viewModel.isDropdownMenuExpanded = false }
) {
for (title in SaveVisitActions.values())
DropdownMenuItem(
onClick = {
when (title) {
SaveVisitActions.SAVE -> {
viewModel.handleSave()
}
SaveVisitActions.SAVEANDOPEN -> {
CoroutineScope(Dispatchers.IO).launch {
delay(3000)
withContext(Dispatchers.Main) {
if (viewModel.isCreateSuccess.value) {
navController.navigate(
"${Screen.VisitDetailScreen.route}/${viewModel.objectState.value?.id}"
)
}
}
}
viewModel.handleSave()
}
}
}) {
Text(text = title.title)
}
}
您可以使用 join() function,它是一個暫停 function,即它可以從協程或另一個暫停 function 中調用。 Job 阻塞所有線程,直到編寫它的協程或上下文完成它的工作。 只有當協程完成時,join() function 之后的行才會被執行。
使用 await() 方法等待您正在等待的值。 我想您正在等待視圖 model 中 isCreateSuccess 的值。 創建一個等待暫停返回的值的作業 function 等待來自視圖 model 的成功值。
val handleSave = async { waitForSuccess() }
if(handleSave.await()){
viewModel.handleSave()
}else{
// show your error here
}
suspend fun waitForSuccess() : Boolean{
// get your Success Value from view model here
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.