Firestore Pagination запрос не возвращает все результаты - PullRequest
0 голосов
/ 21 марта 2020

Я реализовал запрос пожарной службы пагинации, чтобы возвращать результаты по 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, например. Это будет тянуть все данные.

Заранее благодарим за любую помощь

...