gpt4 book ai didi

javascript - 按降序时间戳排序时,Firestore startAfter() 以无限滚动方式返回相同的数据

转载 作者:行者123 更新时间:2023-11-30 19:21:48 31 4
gpt4 key购买 nike

我正在使用 Ionic 上的 Firestore 编写一个按时间顺序排列的用户帖子(最新帖子在顶部)的个人资料页面,方法是将 orderBy() 设置为“timestamp下降。当用户到达底部时,我正在使用 Ionic 的无限加载来加载更多帖子,但结果是 Firestore 一遍又一遍地加载完全相同的帖子。请帮忙!

嗨!

如果这是一个初学者问题,我很抱歉,但我已经为此绞尽脑汁好几个小时都无济于事。分页在升序时正常工作,但在降序时加载相同的帖子。我考虑过尝试以下替代方案,但它们不符合成本效益:

  1. 更改用户到达底部时的限制:这将导致一遍又一遍地阅读所有帖子
  2. 按升序排列但颠倒数组:会破坏分页的目的
  3. 使用查询(where)获取 x 时间戳之前的文档:理论上可行,但有点老套,我真的很想知道 startAfter() 是如何工作的,因为它已经存在。

.

'''

READ_posts__profile(uid,limit, start) : Promise<[]>
{
return new Promise((resolve, reject) =>
{

if (start == null)
{
resolve();
}
else if(start == 'head')
{
start = new Date();
}
console.log(start);


this._DB.collection(this.ref.posts + uid + '/userposts' )
.orderBy("timestamp", 'desc').startAfter(start).limit(limit)
.get()
.then((querySnapshot) =>
{

let obj : any = [];

console.log(obj);

querySnapshot
.forEach((doc : any) =>
{
obj.push({
id : doc.id,
content : doc.data().content,
likes : doc.data().likes,
timestamp : doc.data().timestamp,
comments : doc.data().comments
});

});

resolve(obj);
})
.catch((error : any) =>
{
reject(error);
});
});
}

'''

预期结果:帖子从最新到最旧无限滚动结果: 无限滚动前 x 个帖子(限制为 x)

感谢您花时间阅读。希望尽快收到你们的来信!

供 future 引用的更新:它不是在 .startAfter() 中使用文档本身,而是像这样使用 doc.timestamp:

      this._DB.collection(this.ref.posts + uid + '/userposts' )
.orderBy("timestamp", "desc").startAfter(start.timestamp).limit(this.limit)
.get()
.then(querySnapshot =>
{

最佳答案

在我的例子中,我添加了这样的查询

query.startAfter(lastId)

它应该在的地方

query = query.startAfter(lastId)

关于javascript - 按降序时间戳排序时,Firestore startAfter() 以无限滚动方式返回相同的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57375231/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com