首页 > 解决方案 > 使用 express 进行长轮询模拟

问题描述

我的前端需要这些数据来显示列表 - 名称和分数。

[{id: 1, name: 'james', score: null}, {id: 2, name: 'john', score: null}]

假设后端正在进行计算,前端将每秒调用一次,因为分值将在很久以后出现。

所以前端将每秒调用端点,直到返回所有分数。

以下是前端应如何从后端获取数据的步骤。

  1. 打第一个电话

[{id: 1, name: 'james', score: null}, {id: 2, name: 'john', score: null}]

  1. 呈现名称
  2. 显示加载价格

  3. 触发第二次呼叫

[{id: 1, name: 'james', score: 1.2}, {id: 2, name: 'john', score: 2.2}]

  1. 完成,加载被解雇

如何在 express 中模拟一个端点,以便我可以在前端得到这个结果?我的问题是 express 端点又名函数是非持久性的,很难伪造在哪个调用将返回分数。

标签: javascriptrestexpress

解决方案


如果尚未设置计时器,您可以启动一个计时器,有时会填写分数:

 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 });
 });

推荐阅读