【发布时间】:2020-12-09 15:46:25
【问题描述】:
我在我的 SwiftUI 应用项目中使用 Firebase Firestore。在应用程序启动时,我想从各种集合中读取多个文档。
假设我有集合 A(1 个文档)、B(2 个文档)和 C(4 个文档)。来自 A 和 B 的文档中的数据决定了我必须阅读来自 C 的哪些文档。
目前,我有一个 DatabaseHelper 类,它对每个集合都有一个 readCollection 函数(这些 readCollection 函数中的每一个都调用 readDocument 函数来为每个所需的文档创建一个侦听器)。每个 readCollection 函数以及每个 readDocument 函数都有一个完成处理程序。在应用程序启动时,我从阅读集合 A 开始。完成阅读后,它开始阅读 B,依此类推:
func listen(completion: @escaping () -> ()) {
readA() {
readB() {
readC() {
completion()
}
}
}
}
我的应用在显示任何数据之前正在等待监听功能完成。
这种方法“有点工作”,但是,它似乎不是最佳方法。例如,如果我读取 A,然后我从 B 读取两个文档,则从 B 调用完成处理程序两次,这导致两次调用 readC(),除非我计算 B 的文档读取并且仅在最后阅读。那么,问题是,只有更新 B 中的第二个文档会触发完成处理程序并从 C 重新加载文档,但不会更新 B 中的第一个文档。
当然,必须有一个更好的逻辑来在我的应用程序启动时从数据库中加载我的数据,它可以在运行时正确处理每个文档更新,并且没有不必要的双重读取。
有人有更好的方法吗?谢谢
【问题讨论】:
标签: firebase google-cloud-firestore swiftui logic read-data