0

현재 특정 사용자 이름으로 사용자를 찾으려고 시도하는 데이터를 쿼리하는 Firestore 데이터베이스 참조가 있습니다. 사용자를 얻은 후에 로그인하려고합니다. 그러나 사용자를 쿼리하는 코드 블록이 호출되는 즉시 반환되는 것으로 나타났습니다. 완료 블록을 추가하거나 적어도 쿼리가 완료 될 때까지 프로그램을 중지하는 방법이 있습니까?Firestore 쿼리에서 완성 블록을 가질 수 있습니까?

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) 
}) 

https://i.stack.imgur.com/hI1iY.png

+0

코드에 완성 블록이 이미 있습니다. 즉,'snap? .documents'를 반복합니다. 조쉬가 대답 한대로'Auth.auth(). signIn' 코드 **를 ** 콜백 블록으로 옮기고 자 할 것입니다. –

답변

1

당신은 아마 for 루프 후, 당신의 signIngetDocuments 핸들러 안쪽에 둘 필요가 내 경우 FireStore 데이터베이스의 이미지에 대한 링크입니까?

+0

감사합니다. 나는 대답을 보았을 때 어리 석 었습니다. –

+0

비동기 코드로 시작할 때 모든 사람이 이런 종류의 실수를 저지르는 것으로 생각합니다. –