如何在每个时间段发送猫鼬文件请求



我正在尝试在一段时间内发送猫鼬文档。假设mongoose文档如下:

[
{ _id : X, name, surname, image,created_at},
{ _id : Y, name, surname, image,created_at},
{ _id : Z, name, surname, image,created_at},
{ _id : Q, name, surname, image,created_at}, 
]

我需要的是,如果所有客户端现在发送请求,我需要发送文档X和Y, 5秒后我需要发送Z和q。5秒后它需要重复发送X和Y。

解决方案是使用分页,最后一次尝试请求的时间,服务器启动的时间。以下代码:

class DiscoverHandler {
constructor(model) {
this.time = Date.now()
this.model = model;
this.page = 1;
this.perPageTime = 5000; // ms
this.maxPage = Infinity
}
paginateHandler() {
const now = Date.now();
const difference = now - this.time;
const pageStep = Number((difference / this.perPageTime).toFixed(0))
if (difference >= this.perPageTime) {
this.nextPage(pageStep)
}
}
nextPage(pageStep = 1) {
if (this.page + pageStep > this.maxPage) {
this.page = pageStep;
}
else {
this.page = this.page + pageStep;
}
this.time = Date.now()
}
async getData(query, options = {}) {
return new Promise(async (resolve, reject) => {
this.paginateHandler();
const data = await this.model.paginate({}, {
page: this.page,
limit: 2,
...options
}
)
if (data) {
this.maxPage = data.totalPages
resolve(data.docs)
}
else {
resolve("error getting")
}
})
}
async sendResponse(res, query = {}) {

res.send({ data: await this.getData(query) })
}

}
module.exports = DiscoverHandler;

最新更新