2016-08-10 3 views
1

Ich versuche, die UID von einem Abschlusshandler zu bekommen, so dass ich einen Pfad erstellen und einige Elemente aus meiner Firebase DB abrufen kann, aber wertet bis zum Zeitpunkt Null dbRef wird aufgerufen .Abschlusshandler wird nicht aufgerufen, wie angenommen Swift

Mein Problem ist, dass mein Completion-Handler aufgerufen wird, nachdem dbRef bereits aufgerufen wurde und nicht umgekehrt. Ich dachte, dass mein Code in Zeile ausgeführt werden, 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() 
} 

Antwort

1

Der Abschluss Handler asynchron gehandhabt wird, da die Operation kann einige Zeit dauern. Wenn Sie danach dbRef haben müssen, müssen Sie dies in den Completion-Handler einfügen.

+0

Also im Grunde funktioniert es auf diese Weise: während addAuthStateDidChangeListener die Informationen aus der Datenbank ergreift und auth & user-Variable auffüllt, geht die Codeausführung zu dbRef weiter und sobald addAuthStateDidChangeListener seine Aufgabe beendet hat, wird der Code nach 'in' weiter ausgeführt . Ich denke ich habe es. – bibscy

+0

@bogdanbarbulescu Klingt richtig. – dersvenhesse

Verwandte Themen