返回受get文档的干扰Firestore迅速

我一直在尝试获取分页数据,但是由于某些原因,我无法正确处理此数据。我做了几次调试,但是由于没有任何错误,看来这是Firestore getDocuments的预期行为。任何帮助将不胜感激->我正尝试通过以下方法返回posts变量

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

中对此进行了很好的解释。
hf51963051 回答:返回受get文档的干扰Firestore迅速

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

有关在闭合完成块中管理数据的一些示例,请参见Firestore quickstart

本文链接:https://www.f2er.com/2557219.html

大家都在问