轮询那些事儿

💡 一、什么时候需要用到"轮询"?

轮询适合用于:

后端处理时间不确定,前端需要持续等待结果的场景。

🔹 常见业务场景:

场景 说明

✅ 文件上传后等待处理结果 后端要转码、分析、生成报告等

✅ 任务提交后等待完成 比如导出Excel、生成PDF、生成报表

✅ 审批/支付系统 比如轮询支付结果、风控校验结果

✅ 异步交易(你系统中的"债券下达指令") 提交指令 → 后台风控处理 → 轮询查结果

✅ 消息通知 / 状态更新 实时性不高,又不能用WebSocket时

1️⃣ 提交任务(调用接口A)

2️⃣ 拿到任务ID(taskId)

3️⃣ 每隔几秒查询一次任务状态(接口B)

4️⃣ 如果状态为"成功/失败" → 停止轮询

5️⃣ 如果超过最大次数还没结果 → 提示超时

typescript 复制代码
export default {
  data() {
    return {
      timer: null,
      timerCount: 0,
    };
  },
  methods: {
    async startPolling(taskId) {
      this.loading = true;
      this.timerCount = 0;

      this.timer = setInterval(async () => {
        this.timerCount++;
        const res = await this.$http.get(`/api/taskStatus/${taskId}`);

        if (res.data.status === 'SUCCESS' || this.timerCount > 10) {
          clearInterval(this.timer);
          this.loading = false;

          if (res.data.status === 'SUCCESS') {
            this.$message.success('任务完成 ✅');
          } else {
            this.$message.warning('任务超时,请稍后重试 ⚠️');
          }
        }
      }, 3000);
    },
    beforeDestroy() {
      clearInterval(this.timer);
    },
  },
};

setInterval 3秒种发一次轮循

timerCount是计数器

轮循调用的API接口: const res = await this.http.get('/api/taskStatus/http.get(`/api/taskStatus/http.get('/api/taskStatus/{taskId}`);

clearInterval(this.timer); 清除计数器

相关推荐
灵感__idea5 小时前
Hello 算法:贪心的世界
前端·javascript·算法
killerbasd8 小时前
牧苏苏传 我不装了 4/7
前端·javascript·vue.js
橘子编程9 小时前
JavaScript与TypeScript终极指南
javascript·ubuntu·typescript
叫我一声阿雷吧10 小时前
JS 入门通关手册(45):浏览器渲染原理与重绘重排(性能优化核心,面试必考
javascript·前端面试·前端性能优化·浏览器渲染·浏览器渲染原理,重排重绘·reflow·repaint
大家的林语冰10 小时前
《前端周刊》尤大开源 Vite+ 全家桶,前端工业革命启动;尤大爆料 Void 云服务新产品,Vite 进军全栈开发;ECMA 源码映射规范......
前端·javascript·vue.js
jiayong2310 小时前
第 8 课:开始引入组合式函数
前端·javascript·学习
天若有情67311 小时前
【C++原创开源】formort.h:一行头文件,实现比JS模板字符串更爽的链式拼接+响应式变量
开发语言·javascript·c++·git·github·开源项目·模版字符串
软件工程师文艺12 小时前
从0到1:Claude Code如何用React构建CLI应用
前端·react.js·前端框架
yuki_uix12 小时前
重排、重绘与合成——浏览器渲染性能的底层逻辑
前端·javascript·面试
止观止12 小时前
拥抱 ESNext:从 TC39 提案到生产环境中的现代 JS
开发语言·javascript·ecmascript·esnext