这是我的第一个问题,如果我犯了一些错误,我很抱歉。
我有一个使用 Firebase 的应用,其中应按特定顺序下载不同的数据。
第一个 block 下载新员工,第二个新电梯和第三个新维护。
目前新数据是随机下载的,因此可能会发生在电梯本身产生错误之前下载与电梯相关的维护数据的情况。
我需要在维护之前下载电梯。我怎样才能做到这一点?
AppDelegate.firDatabase?.child(Stringhe.keyEmployeesDatabase).observe(.childAdded, with: {(snapshot) in
self.createNewEmployee(snapshot: snapshot)
})
AppDelegate.firDatabase?.child(Stringhe.keyElevatorsDatabase).observe(.childAdded, with: {(snapshot) in
self.createNewElevator(snapshot: snapshot)
})
AppDelegate.firDatabase?.child(Stringhe.keyMaintenancesDatabase).observe(.childAdded, with: {(snapshot) in
self.collectMaintenanceData(snapshot: snapshot)
if self.checkIfMaintenanceIsComplete() { self.insertMaintenance() }
})
最佳答案
最简单的方法就是嵌套调用。
AppDelegate.firDatabase?.child(Stringhe.keyEmployeesDatabase).observe(.childAdded, with: {(snapshot) in
self.createNewEmployee(snapshot: snapshot)
//After new employees, get elevators
AppDelegate.firDatabase?.child(Stringhe.keyElevatorsDatabase).observe(.childAdded, with: {(snapshot) in
self.createNewElevator(snapshot: snapshot)
//After elevators, get maintenance
AppDelegate.firDatabase?.child(Stringhe.keyMaintenancesDatabase).observe(.childAdded, with: {(snapshot) in
self.collectMaintenanceData(snapshot: snapshot)
if self.checkIfMaintenanceIsComplete() { self.insertMaintenance() }
})
})
})
顺便说一句,您可以为您的databaseRef添加一个常量,这样您就不必一遍又一遍地输入相同的内容:
guard let db = AppDelegate.firDatabase else { return }
db.child(Stringhe.keyEmployeesDatabase).observe(.childAdded, with: {(snapshot) in
self.createNewEmployee(snapshot: snapshot)
db.child(Stringhe.keyElevatorsDatabase).observe(.childAdded, with: {(snapshot) in
self.createNewElevator(snapshot: snapshot)
db.child(Stringhe.keyMaintenancesDatabase).observe(.childAdded, with: {(snapshot) in
self.collectMaintenanceData(snapshot: snapshot)
if self.checkIfMaintenanceIsComplete() { self.insertMaintenance() }
})
})
})
编辑:我只是再看一眼这里,我想指出观察.childAdded
对我来说没有太多逻辑意义,除非你每次需要时,始终添加新员工、电梯和维护。也许我对您的业务逻辑做了太多假设,但这种结构的方式只有在添加新员工时才有效 - 否则电梯和维护获取永远不会触发。
关于swift - Firebase 快速下载优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48157719/