继续调用函数直到达到标准

时间:2018-04-06 15:06:52

标签: javascript reactjs

写一个简单的二十一点游戏

我希望它是半自动化的。

玩家击球后我有这个功能

  stick = () => {
    while(this.dealersTotal() < 21){
      setInterval(this.dealToDealer, 3000)
    }
  }

然而,当我这样做时,它只是冻结,因为我认为我超过了堆栈。任何想法为什么会这样做?我可以发布更多代码,但不确定看到其他功能会有多大帮助

dealersTotal只是一个返回数字的函数 dealToDealer只是将经销商的状态设置为下一张牌,然后从牌组中移除顶牌

4 个答案:

答案 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);
};