【发布时间】:2021-09-23 03:56:30
【问题描述】:
我有一个 Vue 项目,在 Vuex 商店中我有这些状态:
state: {
gameStartTimer: 5,
counter: false,
randomNumber: Number,
clickAlert: false
}
现在,在actions 中,我有以下内容:
actions: {
async startCounter({ state }) {
state.counter = true;
state.clickAlert = false;
while (state.gameStartTimer > 0 && state.counter) {
// this sets the timer to count down from 5 to 0
await new Promise(resolve => setTimeout(resolve, 1000));
if (state.counter)
state.gameStartTimer--;
// the if-statement ensures nowTime is acquired upon gameStartTimer reaches 0
if (state.gameStartTimer == 0) {
let timeNow = new Date().getTime();
state.nowTime = timeNow;
}
}
state.counter = false;
// I want to start a second timer here which counts down every second
// until the randomNumber state reaches 0
await new Promise(resolve => setTimeout(resolve, 1000));
if (state.clickAlert)
state.randomNumber--;
if (state.randomNumber == 0) {
state.clickAlert = true;
}
}
},
}
我面临的问题是第一个计时器被包裹在一个while循环中,这是我想要的,所以游戏开始从5倒计时到0。
然后,我想要第二个计时器(randomNumber 用于持续时间)在后台运行,然后将 clickAlert 状态设置为 true。
但是,我根本无法在 async/await 方法中运行第二个计时器。我不太确定语法或逻辑问题是什么。
感谢任何提示。
【问题讨论】:
标签: javascript vue.js async-await promise vuex