我一直在尝试获取分页数据,但是由于某些原因,我无法正确处理此数据。我做了几次调试,但是由于没有任何错误,看来这是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-e037a6654a93和https://firebase.googleblog.com/2018/07/swift-closures-and-firebase-handling.html
中对此进行了很好的解释。答案 0 :(得分:1)
您丢失了return语句位于从fetchNext
函数返回之后异步运行的闭包中。
有关在闭合完成块中管理数据的一些示例,请参见Firestore quickstart。