【发布时间】:2017-01-04 13:44:22
【问题描述】:
我希望我的方法等到 Firebase 请求完成
uploadSingUpInfo 在 Firebase 请求完成之前返回,这对我来说是个问题 - 某些方法返回 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
}
【问题讨论】:
-
不要使用 Firebase 作为返回值的函数——这违背了它的异步特性。您应该计划您的代码以允许 Firebase 执行它的任务,然后在闭包(块)内转到下一步。例如,在您的代码中删除返回并在 createUserBlock 中,作为最后一行而不是返回,调用您的下一个函数来更新您的 UI。
标签: ios swift firebase firebase-realtime-database firebase-authentication