2017-10-16 2 views
0

Bonjour J'ai une application Firebase et je voudrais télécharger toute ma base de données lorsque l'application se lance. Tout cela fonctionne bien mais j'aimerais savoir quand le téléchargement sera terminé. J'ai essayé avec le gestionnaire de complétion mais ce n'est pas bon parce qu'il est appelé chaque fois qu'un nouvel objet est téléchargé. Y at-il un moyen d'être averti quand il a fini de télécharger?Comment détecter lorsque l'observateur a terminé Firebase

+0

Pour détecter quand tous les enfants initiaux ont été lus, vous devez observer l'événement '.value'. En voici un [exemple pour Swift] (https://stackoverflow.com/questions/46017039/firebase-childadded-and-activity-indicator/46018057#46018057) et pour JavaScript (où la même logique s'applique): [1] (https : //stackoverflow.com/questions/19883736/how-to-discard-initial-data-in-a-firebase-db), [2] (https://stackoverflow.com/questions/12850789/is-there- un-moyen-de-savoir-dans-quel-contexte-enfant-ajouté-est-appelé-en particulier-page/12851236 # 12851236), [3] (https://stackoverflow.com/a/11618929). –

+0

Nous vous remercions de votre aide. Je pourrais résoudre le problème grâce à vous :). –

Répondre

1

Je pourrais résoudre le problème en utilisant l'événement .value. J'ai fait quelque chose comme ça et ça fonctionne bien maintenant.

func getAllDevices(completion: @escaping (Bool) -> Void) { 
    reference.child("devices").queryOrderedByKey().observeSingleEvent(of: .value) { (snapshot) in 

     if let devices = snapshot.value as? [String: Any] { 
      for data in devices.values { 
       self.sync(device: data as! [String : Any]) 
      } 
     } 

     completion(true) 
    }