Я использую функцию updateChildValues для обновления значений для 500 студентов в базе данных, когда я запускаю ее и пытаюсь вызвать другую функцию Firebase, такую как наблюдение, вторая функция (наблюдение) не выполняет и продолжает ждать до первой операции (updateChildValues)) завершается, что занимает почти 15 секунд.
Это мой код для updateChildValues:
@IBAction func menu(_ sender: Any) {
let storeRecord = UIAlertAction(title: "Store attendance record", style: .default) { action in
var attendanceTimesDict = [String: Int]()
var absenceTimesDict = [String: Int]()
for student in self.students { // 500 students
if self.attendanceRecord[student.identifier] == true {
student.attendanceCount += 1
attendanceTimesDict["\(student.identifier)/attendance"] = student.attendanceCount
} else {
student.absenceCount += 1
absenceTimesDict["\(student.identifier)/absence"] = student.absenceCount
}
}
Database.database().reference().child("class").child("CS101").child("records").child("27-4-2019").updateChildValues(self.attendanceRecord)
Database.database().reference().child("class").child("CS101").child("students").updateChildValues(attendanceTimesDict)
Database.database().reference().child("class").child("CS101").child("students").updateChildValues(absenceTimesDict)
}
}
А это мой код для функции наблюдения:
func getStudentsList() {
Database.database().reference().child("class").child("CS101").child("students").observeSingleEvent(of: .value) { snapshot in
for child in snapshot.children.allObjects as! [DataSnapshot] {
let studentObject = child.value as? [String: Any]
if let name = studentObject?["name"] as? String {
let student = Student(identifier: child.key, name: name)
self.students.append(student)
}
}
self.tableView.reloadData()
}
}