我有以下方法-
private fun handleNewFriend(user: UserModel) {
lifecycleScope.launch {
withContext(Dispatchers.Default) {
val selfUsername = profileSharedPrefs.getString(USER_REGISTERED_EMAIL, "")!!
friendsViewModel.addUserFriend(UserFriendsModel(selfUsername, user.id))
}
friendsViewModel.addUsersFriendsErrorResults.observeOnce(requireActivity(), Observer { error ->
error?.let {
Toast.makeText(requireContext(), error.plus(" ").plus(getString(R.string.please_try_again)), Toast.LENGTH_LONG).show()
return@Observer
}
launch{
withContext(Dispatchers.Default) {
friendsViewModel.insertNewFriend(user)
}
navController.popBackStack()
}
})
}
}
addUserFriend()
将数据添加到Firestore数据库中。
addUsersFriendsErrorResults
是我从回调中观察到的实时数据结果,为我提供了一个可空字符串,表示可选错误。
从实时数据中获取结果后,我将打开一个新的协程,这会导致问题-只有第二次单击按钮,并且函数到达该位置后,代码实际上才在启动内部继续{}最后。
为什么会这样?什么会在第一次运行时停止我的代码?