当前位置: 首页 > article >正文

Vue Promise的使用,界面使用异步线程循环执行方法(模拟线程)

目录

1.定义开始和退出标识

2.定义开始方法--异步

3.定义循环方法,以及控制规则

4.定义业务方法


1.定义开始和退出标识

为的是能控制开始和结束,记得销毁时要结束循环,否则方法会一直被执行

data() {
      return {
        isrunning: false, // 轮询的标识
      }
    },

2.定义开始方法--异步

async 标识方法为异步,使用 store 异步调用一个方法,回调方法也标识为 async

然后再回调方法里边执行循环方法

      // 开始刷新
      async startRunning() {
        this.$store.dispatch('orderform/GetInExecutionOrder').then(async (res) => {
          this.runing()
        })
      },

3.定义循环方法,以及控制规则

先将标识isrunning 置为true

然后定义while (true)循环

当isrunning==false时退出循环

循环中控制下睡眠时间

其中index是调用业务方法的间隔周期

用50ms来控制,是希望能及时响应标识isrunning值的变化

        index = index - 50
          if (index <= 0) {
            index = 5000
          }

调用的业务方法 : await this.getOrderState();

async runing() {
        this.isrunning = true;
        await global.sleep(1000)
        var index = 5000
        while (true) {
          if (!this.isrunning) {
            break;
          }
          if (index >= 5000) {
            try {
              await this.getOrderState();
            } catch (error) {
              break; // 如果发生错误,退出循环
            }
          }
          await global.sleep(50)
          index = index - 50
          if (index <= 0) {
            index = 5000
          }
        }
      },

4.定义业务方法

用Promise实现异步调用

记得一定要执行回调方法  resolve();

如果里边还使用了store,就必须要在store的回调方法中执行 resolve(); 

否则会卡死在这个方法里

async getOrderState() {
        //实时刷新订单状态
        return new Promise((resolve) => {
          this.$store.dispatch('orderform/GetInExecutionOrder').then((res) => {
              resolve();
            })
          })
        });
      },


http://www.kler.cn/a/415117.html

相关文章:

  • 2024年11月29日deepin 23 更新公告
  • 《深入理解经典广度优先遍历算法》
  • React中高阶组件HOC详解
  • GaussDB高智能--智能优化器介绍
  • 【ruby on rails】dup、deep_dup、clone的区别
  • 设置ip和代理DNS的WindowsBat脚本怎么写?
  • Java基础面试题08:Java中Exception和Error有什么区别?
  • IDEA如何快速地重写方法,如equals、toString等
  • Sybase数据恢复—Sybase数据库无法启动,Sybase Central连接报错的处理案例
  • 反向代理服务器的用途
  • uniapp关闭sourceMap的生成,提高编译、生产打包速度
  • 如何配置 Gitea 的邮箱功能
  • React Native 原生开发指南
  • MySQL并发事务问题和隔离级别
  • Ubuntu 18.04 中安装 RDKit(针对 Python 2.7)
  • vim 显示行数和删除内容操作
  • C# 预处理器指令
  • SpringMVC前后端数据交互
  • VM Virutal Box的Ubuntu虚拟机与windows宿主机之间设置共享文件夹(自动挂载,永久有效)
  • Leetcode124. 二叉树中的最大路径和(HOT100)
  • blender 视频背景
  • 51单片机快速入门之中断的应用 2024/11/23 串口中断
  • AI+云环境开发上线项目全流程(sealos)
  • 111PHP 循环 - For 循环
  • [论文阅读-综述]Supervised Speech Separation Based on Deep Learning: An Overview
  • 【智能制造-43】机器人导出的轴配置问题