2021-04-27

本文详细介绍了如何在Vue.js应用中实现压缩包上传,并通过轮询检查上传进度,以提升用户体验。在上传大文件时,利用定时器进行轮询,根据后端返回的状态码决定是否继续轮询或显示成功信息。同时,文章提供了具体的Vue组件代码示例,包括上传按钮的触发、轮询方法的实现以及关闭操作时的定时器清理。
摘要由CSDN通过智能技术生成

vue轮询,压缩包上传轮询

1.轮询干什么?
我主要是用在上传图片压缩包,如果包大,可能导致上传时间过长,用户体验差
2.轮询怎么做?
定时器.关于轮询和长轮询还是长连接我就在这里一一介绍了,感兴趣的小伙伴可以去度娘看看

示例:压缩包上传情况轮询

点击上传压缩包弹框内的导入按钮

 //上传压缩包导入按钮
    async keepUpImgZip() {
      if (JSON.stringify(this.fileObjData) == "{}") {  //判断导入是否有导入文件
        this.$message({
          type: "error",
          message: "上传文件不能为空",
        });
        return;
      }
      let dataa = {  //访问接口数据
        identity: this.identity,
        repeatRule: this.radio,
        errorRule: this.radioB,
      };
      // FormData 对象,这里后端要求我请求参数类型FormData,看你们的具体需求
      let form = new FormData();
      // 文件对象
      form.append("faceImgZip", this.fileObjData);
      form.append("data", encrypt(dataa));//encrypt是我的加密文件,你们可以木有
      try {
        let {
          data: { status, msg, result },
        } = await this.$store.dispatch("importFaceImages", form);

        this.loading = false;
        if (status === 1000) {//我这里后端返回一个状态码,我需要拿到状态码去请求轮询接口
          this.handleQrcodeCheck(result);
        } else {
          this.$message({
            type: "error",
            message: msg,
          });
          this.noticeModal = false;
          return;
        }
      } catch (err) {
        console.log(err);
      }
    },

具体的轮询方法

    async handleQrcodeCheck(key) {//轮询方法
      this.percentage = 50;//percentage为element的进度条
      //timer:null是data中定义的初始值,clearInterval()只是暂停定时器,彻底清除还是需要手动赋值为null,回收定时器
      this.timer = setInterval(async () => {
      //setInterval一直执行回导致页面卡死,setTimeout则带清除 功能
        setTimeout(async () => {//异步操作需要es6 async
          try {
            let {
              data: { status, result, msg },
            } = await this.$store.dispatch("importConf", {//这是我封装的接口,你们可以使用axios访问轮询接口
              key: key,
            });
            if (result !== "null") {//返回结果不为空,证明导入成功,清除定时器
              this.percentage = 100;//percentage为element的进度条,请求成功完成度100%
              this.$message({
                type: "success",
                message: msg,
              });
              clearInterval(this.timer);
              this.timer = null;
            } else {//导入未返回结果,继续轮询,在这之前先清除定时器,防止页面卡死
              clearInterval(this.timer);
              this.percentage = 70;//percentage为element的进度条
              this.timer = null;
              this.handleQrcodeCheck(key);//自己调用自己继续轮询
            }
          } catch (err) {
            console.log(err);
          }
        }, 0);
      }, 1000);//一秒轮询一次
    },

关闭进度条显示框清除定时器

 closeUpdlag() {
      this.fileObjData={}//清除导入的文件缓存
      this.dialogVisibleAAA = false;//关闭进度条显示框
      clearInterval(this.timer);//清除定时器
      this.timer = null;//手动清除回收定时器
    },
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值