前端实现轮询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/**
 *
 * @param callback 需要轮询的函数
 * @param interval 轮询的间隔时间
 * @returns
 */
export function pollFn(callback, interval = 1000) {
  let timerId;
  //是否停止轮询
  let isStop = false;
  //轮询请求
  const pollFetch = async () => {
    await callback();
    if (isStop) return;
    timerId = setTimeout(pollFetch, interval);
    return;
  };
  //开始轮询
  const start = async () => {
    await pollFetch();
  };
  //停止轮询
  const stop = () => {
    isStop = true;
    clearTimeout(timerId);
  };
  return {
    start,
    stop,
  };
}

  

1
2
3
4
5
6
7
//使用方法
mounted(){
 this.pollManager = pollFn(this.pollQuery, 5000 );
//开始轮询
 this.pollManager&&this.pollManager.start&&this.pollManager.start();
//7秒之后清楚轮询
setTimeout(()=>{this.pollManager&&this.pollManager.stop&&this.pollManager.stop(); <br>this.pollManager=null; },<br>7000) } <br>//http请求 <br>async pollQuery(){ <br> await new Promise((resolve, reject) => {<br> setTimeout(()=>{ resolve(true) },5000) <br>   })  <br>}

  

posted @   无忧lv  阅读(276)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示