Я реализовал запрос пожарной службы пагинации, чтобы возвращать результаты по 5 за раз.
Сначала начинается с создания слушателя и получения 5 результатов. При повторной ссылке sh получаются еще 5 результатов. На 2-й тяге, чтобы обновить sh, он почему-то тянет 10 результатов. На 3-й тяге для refre sh это не тянет никаких результатов. После просмотра данных некоторые данные отсутствуют.
Ниже моя функция MessageListener:
func createMessageListener() {
reference = db.collection(["chats", channel.id!, "messages"].joined(separator: "/"))
let first = reference?.order(by: "created", descending: true).limit(to: 5)
messageListener = first!.addSnapshotListener { querySnapshot, error in
guard let snapshot = querySnapshot else {
print("Error listening for channel updates: \(error?.localizedDescription ?? "No error")")
return
}
snapshot.documentChanges.forEach { change in
self.handleDocumentChange(change)
self.updateReadStatus()
}
guard let lastSnapshot = snapshot.documents.last else {
// The collection is empty.
self.hasMoreMessages = false
return
}
self.last = self.reference?.order(by: "created", descending: true).start(afterDocument: lastSnapshot).limit(to: 5)
}
}
Ниже моя функция loadMoreMessages:
func loadMoreMessages() {
if hasMoreMessages {
last!.addSnapshotListener { querySnapshot, error in
guard let snapshot = querySnapshot else {
print("Error listening for channel updates: \(error?.localizedDescription ?? "No error")")
self.hasMoreMessages = false
self.delegate.viewModelDidLoadMoreMessages(hasMoreMessages: self.hasMoreMessages)
return
}
self.moreMessagesLoaded = true
snapshot.documentChanges.forEach { change in
self.handleDocumentChange(change)
}
self.delegate.viewModelDidLoadMoreMessages(hasMoreMessages: true)
guard let lastSnapshot = snapshot.documents.last else {
// The collection is empty.
self.hasMoreMessages = false
return
}
self.last = self.reference?.start(afterDocument: lastSnapshot)
}
} else {
self.delegate.viewModelDidLoadMoreMessages(hasMoreMessages: self.hasMoreMessages)
}
}
Не слишком уверен, что происходит. Если в функции создания слушателя я изменяю первый предел на 35, например. Это будет тянуть все данные.
Заранее благодарим за любую помощь