我有这个启动定时器功能
async startTimer() {
this.count = 30;
for (var i = 30; i >= 0; i--) {
await new Promise((f) => setTimeout(f, 1000));
this.count = i;
}
}
它通过调用this.startTimer()
启动,但当我尝试设置this.count=0
以停止计时器时,它不会停止,而当我再次运行this.startTimer
时,旧的计时器也会运行。
有什么办法吗?谢谢
2条答案
按热度按时间elcex8rz1#
设置
this.count = 0
之后会发生什么?startTimer
等待承诺,然后它设置this.count = i
,然后它执行i--
,然后它检查条件i >= 0
,所以循环只是继续,没有任何东西会中断循环。tmb3ates2#
去掉
i
,直接使用count
。同时引入一个isRunning
标志。下面的例子仍然利用-1,因为你不能取消一个承诺。
堆栈 lightning 战:https://stackblitz.com/edit/angular-p4zg94?file=src/app/app.component.ts