Javascript Firestore分页以错误顺序追加数组

Javascript Firestore分页以错误顺序追加数组,javascript,firebase,google-cloud-firestore,Javascript,Firebase,Google Cloud Firestore,我正在尝试从最新到最旧(从下到上)对我的消息进行分页。我的查询可以工作,但在我查询新消息后,它会以错误的顺序追加数组。我确实关注了这篇文章。这是我的逻辑: //Global variables let start = null let end = null collectionRef .orderBy('createTimestamp', 'desc') .limit(10) .get() .then(snapshot => {

我正在尝试从最新到最旧(从下到上)对我的消息进行分页。我的查询可以工作,但在我查询新消息后,它会以错误的顺序追加数组。我确实关注了这篇文章。这是我的逻辑:

//Global variables
let start = null
let end = null

collectionRef
      .orderBy('createTimestamp', 'desc')
      .limit(10)
      .get()
      .then(snapshot => {
        start = snapshot.docs[snapshot.docs.length - 1]
        if (start) {
          const listener = collectionRef
            .orderBy('createTimestamp')
            .startAt(start)
            .onSnapshot(messages => {
              messages.docChanges().forEach(change => {
                const message = this.convertObjectTimestampPropertiesToDate({
                  id: change.doc.id,
                  ...change.doc.data()
                })
                if (change.type === 'added') {
                  store.commit('chats/addMessage', message)
                }
              })
            })
          store.commit('chats/setObserver', listener)
        }
      })
如果我在消息列表的顶部,则启动此函数(这是我的消息顺序出错的部分。它将最大的时间戳项目向上移动,将较小的时间戳项目向下移动,这是错误的。):

将消息添加到阵列的My Vuex变体:

addMessage: (state, message) => {
    const exists = state.messages.find(m => {
      return m.id === message.id
    })
    if (!exists) {
      state.messages.push(message)
    }
},
下面是正在进行的可视化:

这是我运行
getMoreMessages()
后的控制台时间戳日志:


我不明白我做错了什么。看起来查询工作正常,但是追加逻辑失败了。我尝试在前端执行
unshift()
而不是
.push()
和按时间戳排序,但顺序也错误。非常感谢您的帮助

订单中是否缺少
'desc'
?默认情况下,Firestore将使用
asc
,但我在您的第一次通话中看到您指定了
desc

我在需要“asc”的地方不使用“desc”,这是应该使用的,因为我在这一点上会反过来查询。请您更新,以更好地描述您得到的内容以及错误原因?你的视觉模糊且移动速度快。另外,如果你能在文档中包含数据的外观以及之后数据的顺序。我无法想象使用降序得到一个偏移量,然后再使用升序得到偏移量会真正起作用,但我会接受你说这是你想要的。它会在我得到新页面后将最后一项放在第一位。我和国际非政府组织一起编辑了这个问题,我是从哪里得到灵感的。请你更新一下,更好地描述一下你得到了什么,以及为什么错了?
addMessage: (state, message) => {
    const exists = state.messages.find(m => {
      return m.id === message.id
    })
    if (!exists) {
      state.messages.push(message)
    }
},
    TEXT 9 TIMESTAMP Wed Sep 25 2019 16:14:09 GMT+0300 (Eastern European Summer Time)
chats.mutations.js?7021:29 TEXT 10 TIMESTAMP Wed Sep 25 2019 16:14:10 GMT+0300 (Eastern European Summer Time)
chats.mutations.js?7021:29 TEXT 11 TIMESTAMP Wed Sep 25 2019 16:14:11 GMT+0300 (Eastern European Summer Time)
chats.mutations.js?7021:29 TEXT 12 TIMESTAMP Wed Sep 25 2019 16:14:12 GMT+0300 (Eastern European Summer Time)
chats.mutations.js?7021:29 TEXT 13 TIMESTAMP Wed Sep 25 2019 16:14:13 GMT+0300 (Eastern European Summer Time)
chats.mutations.js?7021:29 TEXT 14 TIMESTAMP Wed Sep 25 2019 16:14:14 GMT+0300 (Eastern European Summer Time)
chats.mutations.js?7021:29 TEXT 15 TIMESTAMP Wed Sep 25 2019 16:14:15 GMT+0300 (Eastern European Summer Time)
chats.mutations.js?7021:29 TEXT 16 TIMESTAMP Wed Sep 25 2019 16:14:16 GMT+0300 (Eastern European Summer Time)
chats.mutations.js?7021:29 TEXT 17 TIMESTAMP Wed Sep 25 2019 16:14:18 GMT+0300 (Eastern European Summer Time)
chats.mutations.js?7021:29 TEXT 18 TIMESTAMP Wed Sep 25 2019 16:14:19 GMT+0300 (Eastern European Summer Time)
chats.mutations.js?7021:29 TEXT 1 TIMESTAMP Wed Sep 25 2019 16:13:24 GMT+0300 (Eastern European Summer Time)
chats.mutations.js?7021:29 TEXT 2 TIMESTAMP Wed Sep 25 2019 16:13:43 GMT+0300 (Eastern European Summer Time)
chats.mutations.js?7021:29 TEXT 3 TIMESTAMP Wed Sep 25 2019 16:13:50 GMT+0300 (Eastern European Summer Time)
chats.mutations.js?7021:29 TEXT 4 TIMESTAMP Wed Sep 25 2019 16:14:05 GMT+0300 (Eastern European Summer Time)
chats.mutations.js?7021:29 TEXT 5 TIMESTAMP Wed Sep 25 2019 16:14:06 GMT+0300 (Eastern European Summer Time)
chats.mutations.js?7021:29 TEXT 6 TIMESTAMP Wed Sep 25 2019 16:14:07 GMT+0300 (Eastern European Summer Time)
chats.mutations.js?7021:29 TEXT 7 TIMESTAMP Wed Sep 25 2019 16:14:08 GMT+0300 (Eastern European Summer Time)
chats.mutations.js?7021:29 TEXT 8 TIMESTAMP Wed Sep 25 2019 16:14:08 GMT+0300 (Eastern European Summer Time)