Эти функции взяты из двух разных служебных файлов. В моем updateUserLocation я постоянно обновляю местоположение текущего пользователя и смотрю на функцию showClosestUser в Location Service. Я пытаюсь сделать запрос с радиусом 100 прямо сейчас (для тестирования, в идеале, меньше, чем радиус 5 или 10). Когда я добавляю точки останова, я вижу, что updateUserLocation непрерывно вызывается, но для функции showClosestUser код запускается до «myQuery? .Observe (.keyEntered, с: {(key, location) in») и не выполняет «UserService». .show (forUID: ключ, завершение: {(пользователь) в "коде? Я пытаюсь выяснить, не запрашивал ли пользователь? (верно), что это не текущий пользователь, поэтому я могу затем создать createNotification. Почему нет этот код выполняется?
static func updateUserLocation(location: CLLocation){
var geoFireRef: DatabaseReference?
var geoFire: GeoFire?
geoFireRef = Database.database().reference().child("Geolocs")
geoFire = GeoFire(firebaseRef: geoFireRef!)
geoFire?.setLocation(location, forKey:(Auth.auth().currentUser?.uid)!)
LocationService.showClosestUser { (user) in
if user != nil {
UserService.createNotification()
}
}
}
static func showClosestUser( completion: @escaping (User) -> ()){
var geoFireRef: DatabaseReference?
var geoFire: GeoFire?
var myQuery: GFQuery?
geoFireRef = Database.database().reference().child("Geolocs")
geoFire = GeoFire(firebaseRef: geoFireRef!)
let userLat = UserDefaults.standard.value(forKey: "current_latitude") as! String
let userLong = UserDefaults.standard.value(forKey: "current_longitude") as! String
let location:CLLocation = CLLocation(latitude: CLLocationDegrees(Double(userLat)!), longitude: CLLocationDegrees(Double(userLong)!))
myQuery = geoFire?.query(at: location, withRadius: 100)
myQuery?.observe(.keyEntered, with : { (key, location) in
UserService.show(forUID: key, completion: { (user) in
if let user = user {
if (user.uid != User.current.uid){
completion(user)
}
}
else {return}
})
})
}