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