轮询那些事儿

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

轮询适合用于:

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

🔹 常见业务场景:

场景 说明

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

✅ 任务提交后等待完成 比如导出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); 清除计数器

相关推荐
掘金安东尼21 小时前
让 JavaScript 更容易「善后」的新能力
前端·javascript·面试
掘金安东尼21 小时前
用 HTMX 为 React Data Grid 加速实时更新
前端·javascript·面试
灵感__idea1 天前
Hello 算法:众里寻她千“百度”
前端·javascript·算法
袋鼠云数栈UED团队1 天前
基于 Lexical 实现变量输入编辑器
前端·javascript·架构
亦妤1 天前
JS执行机制、作用域及作用域链
javascript
SuperEugene1 天前
表单最佳实践:从 v-model 到自定义表单组件(含校验)
前端·javascript·vue.js
不会敲代码11 天前
React性能优化:深入理解useMemo和useCallback
前端·javascript·react.js
YukiMori231 天前
一个有趣的原型继承实验:为什么“男人也会生孩子”?从对象赋值到构造函数继承的完整推演
前端·javascript
摸鱼的春哥1 天前
惊!黑客靠AI把墨西哥政府打穿了,海量数据被黑
前端·javascript·后端
小兵张健1 天前
Playwright MCP 截图标注方案调研(推荐方案1)
前端·javascript·github