【问题标题】:Why is my swift code executing out of order? Firebase authentication为什么我的快速代码执行无序? Firebase 身份验证
【发布时间】:2021-02-19 16:13:38
【问题描述】:

我正在调用Authenticator.loginUser(),期望该方法将登录用户然后调用getCurrentUser()。根据打印输出,getCurrentUser() 首先执行。有没有办法强制它按顺序执行?

class Authenticator: ObservableObject {
        
        @Published var currentUser: UserProfile = UserProfile()
        @Published var user: String = ""
        @Published var documentId: String = ""
            
        func loginUser (email: String, password: String, viewModel: UsersViewModel) {
            FirebaseAuth.Auth.auth().signIn(withEmail: email, password: password, completion: { result, error in
                
                guard error == nil else {
                    print ("error: \(error!)")
                    return
                }
                print ("user signed in")
            })
            self.user = self.getCurrentUser(viewModel: viewModel)
        }
        
        func getCurrentUser(viewModel: UsersViewModel) -> String {
            guard let userID = Auth.auth().currentUser?.uid else {
                return ""
            }
            
            viewModel.users.forEach { i in
                if (i.userId == userID) {
                    currentUser = i
                }
            }
            
            documentId = currentUser.documentId!
            print("auth.documentId \(documentId)")
            return userID
        }
        
    }

【问题讨论】:

标签: swift firebase firebase-authentication swiftui


【解决方案1】:

FirebaseAuth.Auth.auth().signIn异步 - 它在 background 中运行,而 notmain 线程上运行。这意味着signIn 将在将来的某个时间被调用。

一种解决方案是将调用 getCurrentUser 放在完成块中:

func loginUser(email: String, password: String, viewModel: UsersViewModel) {
    FirebaseAuth.Auth.auth().signIn(withEmail: email, password: password, completion: { result, error in
        guard error == nil else {
            print("error: \(error!)")
            return
        }
        print("user signed in")
        self.user = self.getCurrentUser(viewModel: viewModel) // move here
    })
}

【讨论】:

    猜你喜欢
    • 2018-04-30
    • 2021-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 2019-09-02
    • 2011-09-15
    • 2021-09-27
    相关资源
    最近更新 更多