【发布时间】: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-e037a6654a93 和 https://firebase.googleblog.com/2018/07/swift-closures-and-firebase-handling.html 有很好的解释
【问题讨论】:
标签: ios swift firebase google-cloud-firestore pagination