0

Ich habe derzeit einen Firestore-Datenbankverweis, der die Daten abfragt, die versuchen, einen Benutzer mit einem bestimmten Benutzernamen zu finden. Nachdem ich den Benutzer bekommen habe, möchte ich versuchen mich einzuloggen. Ich habe jedoch festgestellt, dass der Codeblock, der für einen Benutzer abgefragt werden soll, zurückkehrt, sobald er aufgerufen wird. Gibt es eine Möglichkeit, einen Abschlussblock hinzuzufügen oder zumindest das Programm zu stoppen, bis die Abfrage beendet ist. DieseIst es möglich, einen Abschlussblock in der Firestore-Abfrage zu haben?

u.name = name 
global.db.collection("users").whereField("username", isEqualTo: u.name).getDocuments(completion: { (snap, error) in 
    if error != nil { 
     print(error?.localizedDescription as Any) 
     return 
    } 
    for doc in (snap?.documents)! { 
     u.email = doc.data()["email"] as! String 
    } 
}) 

Auth.auth().signIn(withEmail: u.email, password: password, completion: { (user, error) in 
    if error != nil { 
     print(error?.localizedDescription as Any) 
     return 
    } 
    print("Succesfully Logged In") 
    self.toListSelector(user: u) 
}) 

ist der Link zu dem Bild meiner Firestor Datenbank https://i.stack.imgur.com/hI1iY.png

+0

Da ist bereits * ein Completion-Block in Ihrem Code: Dort können Sie die 'snap? .documents' durchlaufen. Als Josh antwortete, sollten Sie den 'Auth.auth(). SignIn'-Code ** in ** den Callback-Block verschieben. –

Antwort

1

Sie benötigen signIn INSIDE der getDocuments Handler setzen, wahrscheinlich nach der for Schleife?

+0

Danke Ich fühle mich jetzt irgendwie dumm, dass ich die Antwort sehe. –

+0

Ich denke, jeder macht diese Art von Fehler mindestens einmal, wenn er mit asynchronem Code beginnt. –

Verwandte Themen