Как правильно запросить базу данных Firestore в swift, используя группу рассылки - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь запросить базу данных моего пожарного хранилища и подсчитать, сколько раз для поля установлено предопределенное перечисление.Однако, когда я запускаю его или выполняю через него с точкой останова, закрытие никогда не возвращается, и мой dispatch.wait () зависает навсегда.Я не уверен, почему запрос не работает, так как коллекция существует, и у меня есть тестовые данные для этого запроса.Я также могу читать и писать в коллекцию оценок, так что я не думаю, что это проблема с разрешениями.

Я ожидаю, по крайней мере, получить ошибку, если запрос не выполнен, но он просто пропускает его изависает в ожидании, пока я не остановлю запуск.

    let user = self.user
    let evalRef = self.db.evaluations(forUser: user.userID)

    let dispatchGroup = DispatchGroup()
    for keys in self.stat.enumCases.keys {
        dispatchGroup.enter()
        evalRef.whereField(self.stat.queryName, isEqualTo: keys).getDocuments { (querySnapshot, err) in
            if let err = err {
                print(err.localizedDescription)
                dispatchGroup.leave()
                return
            }
            guard let querySnapshot = querySnapshot else {
                //error
                dispatchGroup.leave()
                return
            }
            guard let enumCaseName = self.stat.enumCases[keys] else {
                //error
                dispatchGroup.leave()
                return
            }
            if querySnapshot.count > 0 {
                self.stat.primaryStatStruct[keys] = primaryStatForEachCase(enumCaseTitle: enumCaseName, enumCaseValue: Double(querySnapshot.count))
                dispatchGroup.leave()
            } else {
                self.stat.primaryStatStruct[keys] = primaryStatForEachCase(enumCaseTitle: enumCaseName, enumCaseValue: 0.0)
                dispatchGroup.leave()
            }
        }
    }
    dispatchGroup.wait()

Вот другие фрагменты, чтобы дать лучшую картинку:

  /// Returns a reference to the user evaluation collection.
  func evaluations(forUser userID: String) -> CollectionReference {
    return self.collection("users/\(userID)/evaluations")
  }

печать ключей и self.stat.queryName

сборник оценок с документами

ключи соответствия данных документа и queryName

Любая помощь будет принята с благодарностью.

...