Почему мой быстрый код работает не по порядку? - PullRequest
0 голосов
/ 03 июня 2019

У меня есть следующий код, и он, кажется, выполняется не по порядку.

var theauth = 0
        ref = Database.database().reference()
        let usersRef = ref?.child("Users")
        let queryRef = usersRef?.queryOrdered(byChild: "username").queryEqual(toValue: emailTextField.text!)
        queryRef?.observeSingleEvent(of: .value, with: { (snapshot) in
            for snap in snapshot.children {
                let userSnap = snap as! DataSnapshot
                let thechild = userSnap.key
                print(thechild + "Hi")
                if thechild != ""{
                    theauth = 3
                    print(thechild + "1")
                }else if self.password2.text == self.passwordTextField.text{
                    theauth = 1
                }else{
                    theauth = 2}
            }
        })

        print(theauth)

Вывод на печать в обратном порядке, чем я ожидал:

0 //theauth value
-Lf9xUh53VeL4OLlwqQoHi //thechild value + Hi
-Lf9xUh53VeL4OLlwqQo1  //thechild value + 1

Мысль ???

1 Ответ

1 голос
/ 03 июня 2019

Запрос асинхронный и выполняется дольше, чем оператор print в конце.Попробуйте добавить оператор print, когда вы устанавливаете переменную, или вызвать метод для выполнения этого оператора print после завершения запроса.

var theauth = 0
ref = Database.database().reference()
let usersRef = ref ? .child("Users")
let queryRef = usersRef ? .queryOrdered(byChild: "username").queryEqual(toValue: emailTextField.text!)
queryRef ? .observeSingleEvent( of: .value, with: {
  (snapshot) in
  for snap in snapshot.children {
    let userSnap = snap as!DataSnapshot
    let thechild = userSnap.key
    print(thechild + "Hi")
    if thechild != "" {
      theauth = 3
      print(thechild + "1")
    } else if self.password2.text == self.passwordTextField.text {
      theauth = 1
    } else {
      theauth = 2
    }
  }
  print(theauth)
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...