gpt4 book ai didi

javascript - Angular 6 setTimeout 和 clearTimeout 错误

转载 作者:行者123 更新时间:2023-11-30 13:55:15 27 4
gpt4 key购买 nike

我有一个 angular 6 的奇怪问题。

我正在使用 setTimeout 和 clearTimeout 函数来启动/取消超时。然而,这有时有效,有时无效。即使用户触发(点击)事件并运行 clearTimeout,有时它也会强制玩家抽两张牌。

这是代码

//an event that says we must call uno 
this._hubService.mustCallUno.subscribe(() => {
this.mustCallUno = true;
this._interval = window.setInterval(() => {
this.countdown -= 100;
}, 100);
this._timer = window.setTimeout(() => {
if (this.mustCallUno) {
this.drawCard(2);
this.callUno();
}
}, 2000);
});

// a function player calls from UI to call uno and not draw 2 cards
callUno() {
this.mustCallUno = false;
window.clearTimeout(this._timer);
window.clearInterval(this._interval);
this.countdown = 2000;
}

所以即使玩家调用callUno()函数,setTimeout也会被执行。更糟糕的是,代码通过 setTimeout if(this.mustCallUno) 中的第一个 if 检查,这无论如何应该是 false,因为我们只是在调用 callUno() 函数时将它设置为 false this.mustCallUno = false;.

我在 window.setTimeout 之前使用了 setTimeout(返回 NodeJS.Timer),结果是一样的。

最佳答案

您使用的是 angular6+,所以我建议您使用响应式编程库,例如 rxjs

我给你做了一个小例子here .

关于javascript - Angular 6 setTimeout 和 clearTimeout 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57429144/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com