目录
1.定义开始和退出标识
2.定义开始方法--异步
3.定义循环方法,以及控制规则
4.定义业务方法
1.定义开始和退出标识
为的是能控制开始和结束,记得销毁时要结束循环,否则方法会一直被执行
javascript">data() {return {isrunning: false, // 轮询的标识}},
2.定义开始方法--异步
async 标识方法为异步,使用 store 异步调用一个方法,回调方法也标识为 async
然后再回调方法里边执行循环方法
javascript"> // 开始刷新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();
javascript">async runing() {this.isrunning = true;await global.sleep(1000)var index = 5000while (true) {if (!this.isrunning) {break;}if (index >= 5000) {try {await this.getOrderState();} catch (error) {break; // 如果发生错误,退出循环}}await global.sleep(50)index = index - 50if (index <= 0) {index = 5000}}},
4.定义业务方法
用Promise实现异步调用
记得一定要执行回调方法 resolve();
如果里边还使用了store,就必须要在store的回调方法中执行 resolve();
否则会卡死在这个方法里
javascript">async getOrderState() {//实时刷新订单状态return new Promise((resolve) => {this.$store.dispatch('orderform/GetInExecutionOrder').then((res) => {resolve();})})});},