我使用 firebase firestore 作为数据库,并且编写了 firebase 函数来从 firestore 数据库检索数据。
我想要实现的是分页,根据文档我已经实现了我的 firebase 函数的代码。下面是代码:
exports.getBillList = functions.https.onRequest((req, res) => {
let docs=[];
let limit = 15;
return cors(req, res, () => {
let lastBillInList=req.query.lastBillInList;
console.log("lastBillInList value: " + lastBillInList);
if (lastBillInList === null || lastBillInList === undefined) lastBillInList = 0;
//var lastVisible = documentSnapshots.docs[documentSnapshots.docs.length - 1];
if(lastBillInList==0){
console.log('first time call: as no lastbillseqq');
db.collection("bills").orderBy('billNo','desc').limit(limit).get().then(function (querySnapshot) {
querySnapshot.forEach(function (doc) {
docs.push(doc.data());
});
res.status(200).send(docs);
}).catch(function (error) {
console.error("Error getting list: ", error);
res.status(500).send();
});
}else{
console.log('second time call: as no lastbillseqq'+ lastBillInList);
db.collection("bills").orderBy('billNo', 'desc').startAfter(lastBillInList).limit(limit).get().then(function (querySnapshot) {
querySnapshot.forEach(function (doc) {
docs.push(doc.data());
});
res.status(200).send(docs);
}).catch(function (error) {
console.error("Error getting list: ", error);
res.status(500).send();
});
}
});
});
我在我的 firebase 函数中添加了条件,它检查是否提供了最后的账单号码。
如果是,则检索最后一张账单之后的所有账单记录,直到设定的限制,否则,如果没有提供最后一张账单号码,则将其视为第一次请求,并检索初始记录直至限制
然而,我面临的问题是,无论执行 else 部分的代码如何,当提供最后一个账单编号时,查询始终返回从结果开始到指定限制的记录。由于某种原因 StartAfter 不起作用
例如,我有帐单编号从1到25的记录,我在上面的代码中按降序排列它们,所以结果是从帐单编号25到1。
如果未提供账单号码,我会得到账单号码从 25 到 11 的结果。
当我提供帐单编号时,我得到帐单编号 25 到 11 的结果,而不是预期的帐单编号 10 到 1。
谁能帮我解决这个问题吗?