【问题标题】:Returning interfered by get documents firestore swift快速获取文件 Firestore 干扰返回
【发布时间】:2020-07-09 22:34:04
【问题描述】:

我一直在尝试获取分页数据,但由于某种原因,我无法做到这一点。我做了很多次调试,但没有任何错误,这似乎是 Firestore getDocuments 的预期行为。任何帮助将不胜感激 -> 我正在尝试从下面的方法返回帖子变量

private var query: Query
    private var documents: [QueryDocumentSnapshot] = []

    init() {
        let db = Firestore.firestore()
        self.query = db.collection("posts").order(by: "createdTimeStamp")
    }

    func updateQuery() -> Query{
        let nextQuery: Query
        if let lastDocument = documents.last {
            nextQuery = query.start(afterDocument: lastDocument).limit(to: 5)
        } else {
            nextQuery = query.limit(to: 5)
        }
        return nextQuery
    }

    public func fetchNext() -> [ObjectPost] {
        var posts: [ObjectPost] = []
        let updatedQuery = updateQuery()

        updatedQuery.getDocuments(completion: { (querySnapshot, error) in
            if let e = error {
                print(e.localizedDescription)
            }

            guard let snapshot = querySnapshot else {
                print("Error fetching next documents: \(error!)")
                return
            }

            let newPosts = snapshot.documents.map { doc -> ObjectPost in
                let post = try! FirestoreDecoder().decode(ObjectPost.self, from: doc.data())
                print("post \(post.postBody)")
                return post
            }

            posts += newPosts
            print("--After posts update")
            self.documents += snapshot.documents
            print("--After documents update")
        })

        print("Before returning posts")
        return posts
    }

我可以到达“文档更新后”,但它永远不会到达“返回帖子之前”,并且帖子也永远不会返回。我在这里错过了什么?

更新: 对于那些将本文作为解决自己查询的方法的人,我错过了 Firebase API 的异步特性,这在 https://medium.com/firebase-developers/why-are-firebase-apis-asynchronous-callbacks-promises-tasks-e037a6654a93https://firebase.googleblog.com/2018/07/swift-closures-and-firebase-handling.html 有很好的解释

【问题讨论】:

    标签: ios swift firebase google-cloud-firestore pagination


    【解决方案1】:

    您错过了 return 语句位于从 fetchNext 函数返回后异步运行的闭包中。

    请参阅Firestore quickstart,了解在闭包完成块中管理数据的一些示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-22
      • 1970-01-01
      • 1970-01-01
      • 2020-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多