2016-08-10 3 views
1

Я пытаюсь получить uid из обработчика завершения, чтобы я мог построить путь и получить некоторые элементы из моей базы данных Firebase, но myuserLogged оценивает нуль к моменту dbRef получает вызов ,обработчик завершения не вызван как предполагаемый Swift

Мои проблемы в том, что мой обработчик завершения называется после того, как dbRef уже был вызван, а не наоборот. Я думал, что мой код будет выполняться в строке 1. FIRAuth.auth()? .... 2. dbRef = FIRDatabase ....

override func viewDidLoad() { 
    super.viewDidLoad() 

    FIRAuth.auth()?.addAuthStateDidChangeListener({ (auth:FIRAuth,  user:FIRUser?) in 
     if let userSignedIn = user { 

      self.myuserLogged = userSignedIn.uid 
      print("Welcome buddy \(self.myuserLogged)") 

     } 
    }) 
print("brother \(self.myuserLogged)") 

    dbRef = FIRDatabase.database().reference().child("Users/\(myuserLogged)") 
    startObservingDB() 
} 

ответ

1

обработчик завершения обрабатывается асинхронно, так как операция может занять некоторое время. Если после этого вам понадобится dbRef, вам нужно поместить его в обработчик завершения.

+0

Таким образом, в основном он работает следующим образом: в то время как addAuthStateDidChangeListener захватывает информацию из базы данных и заполняет переменную auth & user, выполнение кода продолжается до dbRef, и как только addAuthStateDidChangeListener завершит свою задачу, он продолжит выполнение кода после 'in' , Кажется, я понял. – bibscy

+0

@bogdanbarbulescu Звучит правильно. – dersvenhesse

Смежные вопросы