写一个简单的二十一点游戏
我希望它是半自动化的。
玩家击球后我有这个功能
stick = () => {
while(this.dealersTotal() < 21){
setInterval(this.dealToDealer, 3000)
}
}
然而,当我这样做时,它只是冻结,因为我认为我超过了堆栈。任何想法为什么会这样做?我可以发布更多代码,但不确定看到其他功能会有多大帮助
dealersTotal只是一个返回数字的函数 dealToDealer只是将经销商的状态设置为下一张牌,然后从牌组中移除顶牌
答案 0 :(得分:1)
除非您使用函数setInterval
停止,否则将会循环执行函数clearInterval
。
改为使用setTimeout:
stick = () => {
while(this.dealersTotal() < 21){
setTimeout(this.dealToDealer, 3000);
}
}
重要提示:如果this.dealersTotal()
始终返回小于21
的数字,您的代码将进入无限循环。
答案 1 :(得分:1)
虽然循环可能会影响您的性能,但请尝试仅使用间隔。 示例:
stick = () => {
this.interval = setInterval(() => {
if(this.dealersTotal() < 21) {
this.dealersTotal();
clearInterval(this.interval)
}
}, 3000);
}
答案 2 :(得分:0)
`设置interval = setInterval(()=&gt; {
//在这里做你想做的事
if(this.dealersTotal()&gt; = 21){clearInterval(interval)} //保持间隔循环运行直到dealersTotal大于或等于21 },50)// 50ms`
使用当前的一个,你正在调用while循环,这个循环将创建一个新的setInterval,所以如果你有10个while循环,setInterval将被调用10次,这将创建无限的间隔,最终超过处理能力。所以最好只保留间隔,因为while循环将阻塞。虽然循环有利于确定值,或者直到某些事情发生,例如键盘按下。但是当你想要UI多个事情发生时,setInterval是更好的选择。
答案 3 :(得分:0)
你有一个无限循环,在每次迭代时创建新的区间(每个区域将无限运行)。那是什么杀了你的应用程序。
最简单的解决方案是(https://jsfiddle.net/29L556s9/10/):
stick = () => {
setTimeout(() => {
if(dealersTotal() < 21) {
dealToDealer();
stick();
}
}, 3000);
};