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)