对不起,我已经看到此问题以不同的方式被问过很多次,例如:
但是没有一个答案能真正说明解决方案或可以理解。
我还浏览了许多教程,例如:
详细信息:
这就是我到目前为止所做的事情
let query = ref.orderBy(orderBy, asc ? 'asc' : 'desc').limit(limit);
if (startAfter) {
// Thiis works as it should
query = query.startAfter(startAfter);
}
if (endBefore) {
// This here does not work or give the correct results. I get the first page.
query = query.endBefore(endBefore);
}
return query;
所以:
query = query.startAfter(startAfter);
可以正常工作。
但是:
query = query.endBefore(endBefore)
并没有在该文档之前终止,我认为它已经达到了极限。
答案 0 :(得分:3)
所以我认为我是通过受上述github问题启发的评论解决了这个问题:
假设您有这个数组,并且您正在短路上升
A,
B,
C,
D,
E,
F,
您的页面限制为2个结果
然后,当您进入第三页时,
E,
F
现在您需要转到上一页,您需要做的是:
[F,E,D,C,B,A]
E
开始,即[D,C]
[C,D]
答案 1 :(得分:2)
从firebase@7.3.0
开始,您可以使用Query.limitToLast(n: number)
方法-使用分页数据可以更轻松地向后移动。
您的实施细节可能看起来像这样:
function nextPage(last) {
return ref.orderBy('age').startAfter(last.age).limit(3);
}
function prevPage(first) {
return ref.orderBy('age').endBefore(first.age).limitToLast(3);
}