swift - Firebase 快速下载优先级

标签 swift firebase download

这是我的第一个问题,如果我犯了一些错误,我很抱歉。

我有一个使用 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/

相关文章:

ios - UITableViewCell Segue 有时会连接到错误的 Controller

ios - Swift - 更改 UICollectionViewCell 大小

java - 如何将 firebase 数据 (snake_case) 转换为 Java 对象 (camelCase)

ios - 如何快速下载文件?

Python - 使用进度条和基本身份验证通过 HTTP 下载文件

php - 下载到root并从数据库中删除文件后

ios - 从 iOS 应用程序启动 SIRI

xcode - 将 Swift 应用程序分解为框架

Firebase:sendSignInLinkToEmail() 抛出: "The given sign-in provider is disabled for this Firebase project."

android - 带灰色方 block 的通知背景