I want my method to wait until Firebase request finished
uploadSingUpInfo
returns before the Firebase request finishes, and this is a problem for me - some method returns nil.
static func uploadSingUpInfo(fullName:String,email:String,password:String)->String{
rootRef = FIRDatabase.database().reference()
var returnVlue="not valid"
FIRAuth.auth()?.createUserWithEmail(email, password: password) { (user, error) in
if (error != nil){
returnVlue=(error?.userInfo["error_name"]) as! String
}
else{
let newUser = [
"username": fullName
]
rootRef.childByAppendingPath("User")
.childByAppendingPath((user?.uid)!).setValue(newUser)
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "isLogin")
NSUserDefaults.standardUserDefaults().setObject(email, forKey: "email")
NSUserDefaults.standardUserDefaults().setObject(user?.uid, forKey: "user_ID")
print(NSUserDefaults.standardUserDefaults().objectForKey("user_ID"))
returnVlue="valid"
}
}
return returnVlue
}
Don't use Firebase as functions that return values - it goes against it's asynchronous nature.
Plan code structure that allows Firebase to perform it's task and then within the closure (block) go to the next step.
For example: In your code, change the function to not return anything and within the createUserBlock, as the last line instead of return, call the next function to update your UI.
static func uploadSingUpInfo(fullName:String,email:String,password:String) {
rootRef = FIRDatabase.database().reference()
FIRAuth.auth()?.createUserWithEmail(email, password: password) { (user, error) in
if (error != nil){
showUserAnError(error)
} else {
let newUser = [
"username": fullName
]
rootRef.childByAppendingPath("User")
.childByAppendingPath((user?.uid)!).setValue(newUser)
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "isLogin")
NSUserDefaults.standardUserDefaults().setObject(email, forKey: "email")
NSUserDefaults.standardUserDefaults().setObject(user?.uid, forKey: "user_ID")
print(NSUserDefaults.standardUserDefaults().objectForKey("user_ID"))
continueLoginProcess() //reload the ui or whatever step is next
}
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With