javascript - 使用 express 进行长轮询模拟
问题描述
我的前端需要这些数据来显示列表 - 名称和分数。
[{id: 1, name: 'james', score: null}, {id: 2, name: 'john', score: null}]
假设后端正在进行计算,前端将每秒调用一次,因为分值将在很久以后出现。
所以前端将每秒调用端点,直到返回所有分数。
以下是前端应如何从后端获取数据的步骤。
- 打第一个电话
[{id: 1, name: 'james', score: null}, {id: 2, name: 'john', score: null}]
- 呈现名称
显示加载价格
触发第二次呼叫
[{id: 1, name: 'james', score: 1.2}, {id: 2, name: 'john', score: 2.2}]
- 完成,加载被解雇
如何在 express 中模拟一个端点,以便我可以在前端得到这个结果?我的问题是 express 端点又名函数是非持久性的,很难伪造在哪个调用将返回分数。
解决方案
如果尚未设置计时器,您可以启动一个计时器,有时会填写分数:
const data = [/*...*/];
let loading;
function load() {
for(const el of data)
el.score = Math.random();
}
app.get("/api/", (req, res) => {
if(!loading) loading = setTimeout(load, 5000);
res.json({ data });
});