How can i access firebase variable outside firebase function

泄露秘密 提交于 2019-12-18 07:35:10

问题


Im trying to update a variable inside a class "var CurrentStatus:status! " status is an enum. I have a firebase function that will update the variable. the variable get update inside the firebase function but it will not update the variable outside of the firebase function

class signUpClass:UIViewController {

    // check to see if form is empty

    let ihelpController = UIViewController()
    var CurrentStatus:status!

    func signUp(var formArray: [String:String]) -> status{

        var formStatus:status = ihelpController.checkIfFormIsEmpty(formArray)

        if (formStatus == status.success){
          //form is ok to process
          // check DOB
          //TODO: create date calculation function

            let DateOfBirth:Int = 18

            if DateOfBirth < 18 {
               //user is not 18 they can not register
                alertError("oops", message: "You must be 18 to register", comfirm: "Ok")

            } else {
                //Proceed with registration
                let firebaseController = Firebase()
                var email = "asdf@afd.com"
                var password = "1234"

                firebaseController.refPath("users").createUser(email, password: password, withValueCompletionBlock: {error, result in

                    if error != nil {
                        print("registration Error")
                      self.alertError("oops", message: "That email is registered already", comfirm: "OK")

                    } else {
                        let vc =
                        print("user can register")
                        firebaseController.firebaseRefUrl().authUser(email, password: password, withCompletionBlock:{
                            error, authdata in

                            if error != nil {

                                print("login Error")
                            }else{

                                let userId = firebaseController.firebaseRefUrl().authData.uid

                                formArray["userId"] = userId

                                firebaseController.refPath("users/\(userId)").updateChildValues(formArray)
                                print("user is register and can proceed to dashBoard")

                                //Proceed to dashboard
                                self.CurrentStatus = status.success
                            }

                        })

                    }
                })

            }




        }
       return CurrentStatus

    }

回答1:


Agreed with Jay's comment. You cannot return the status like that because Firebases works asynchronously... what I would do, is add a closure parameter that executions on completion like so:

class signUpClass:UIViewController {

// check to see if form is empty

let ihelpController = UIViewController()
var CurrentStatus:status!

func signUp(var formArray: [String:String], complete:(CurrentStatus)->()){

    var formStatus:status = ihelpController.checkIfFormIsEmpty(formArray)

    if (formStatus == status.success){
      //form is ok to process
      // check DOB
      //TODO: create date calculation function

        let DateOfBirth:Int = 18

        if DateOfBirth < 18 {
           //user is not 18 they can not register
            alertError("oops", message: "You must be 18 to register", comfirm: "Ok")

        } else {
            //Proceed with registration
            let firebaseController = Firebase()
            var email = "asdf@afd.com"
            var password = "1234"

            firebaseController.refPath("users").createUser(email, password: password, withValueCompletionBlock: {error, result in

                if error != nil {
                    print("registration Error")
                  self.alertError("oops", message: "That email is registered already", comfirm: "OK")

                } else {
                    let vc =
                    print("user can register")
                    firebaseController.firebaseRefUrl().authUser(email, password: password, withCompletionBlock:{
                        error, authdata in

                        if error != nil {

                            print("login Error")
                        }else{

                            let userId = firebaseController.firebaseRefUrl().authData.uid

                            formArray["userId"] = userId

                            firebaseController.refPath("users/\(userId)").updateChildValues(formArray)
                            print("user is register and can proceed to dashBoard")

                            //Send status to callback to handle
                            complete(status.success)
                        }
                    })
                }
            })
        }
    }
}


来源:https://stackoverflow.com/questions/37244952/how-can-i-access-firebase-variable-outside-firebase-function

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!