轮询那些事儿

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

轮询适合用于:

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

🔹 常见业务场景:

场景 说明

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

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

相关推荐
全栈前端老曹10 分钟前
【MongoDB】Node.js 集成 —— Mongoose ORM、Schema 设计、Model 操作
前端·javascript·数据库·mongodb·node.js·nosql·全栈
低代码布道师1 小时前
Next.js 16 全栈实战(一):从零打造“教培管家”系统——环境与脚手架搭建
开发语言·javascript·ecmascript
一位搞嵌入式的 genius1 小时前
深入 JavaScript 函数式编程:从基础到实战(含面试题解析)
前端·javascript·函数式
choke2332 小时前
[特殊字符] Python 文件与路径操作
java·前端·javascript
wuhen_n2 小时前
JavaScript内置数据结构
开发语言·前端·javascript·数据结构
鹿心肺语3 小时前
前端HTML转PDF的两种主流方案深度解析
前端·javascript
一个懒人懒人3 小时前
Promise async/await与fetch的概念
前端·javascript·html
xiaoxue..5 小时前
合并两个升序链表 与 合并k个升序链表
java·javascript·数据结构·链表·面试
要加油哦~5 小时前
AI | 实践教程 - ScreenCoder | 多agents前端代码生成
前端·javascript·人工智能
一个public的class5 小时前
你在浏览器输入一个网址,到底发生了什么?
java·开发语言·javascript