如何暂停递归JavaScript函数?函数使用setInterval()来延迟每次迭代

时间:2014-02-08 15:11:15

标签: javascript jquery recursion

        function live() { 

            middleMan = setInterval(processGeneration, speed);
            if (!dead) {
                window.clearInterval(middleMan);
                live();
            }
        }

此代码用于每 speed 毫秒运行 processgeneration()函数,直到 dead 为真。代码运行时,返回

error: too much recursion

到控制台。我忽略了这一点,因为代码仍然按预期工作(显然)。现在我想添加一个暂停功能,如下所示:

                if (!pause) {
                    live();
                    console.log(g); //for debugging
                }

但它不会对暂停更改的值做出反应(通过按钮点击切换)。 g 的值都没有返回到控制台。我如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

试试这个

  function live() { 
    if (dead) {
      clearInterval(middleMan);
      return;
    }
    // do something when alive
  } 
  var middleMan=setInterval(live,speed);

  function live() { 
    if (dead) {
      return;
    }
    // do something when alive
    setTimeout(live,speed);
  } 
  live();

答案 1 :(得分:1)

你已经递归调用了live()函数,这个函数没有停止,我想你想要这样的事情,processgeneration()正在执行,直到死为真。

var speed = 1000;
dead = false;

middleMan = setInterval(processGeneration, speed);
function live() { 
    if (dead) {
        alert('this will clear the set interval');
        window.clearInterval(middleMan);
    }
}

function processGeneration(){
    console.log("output ");
}

setTimeout(function(){
    dead = true; //put your condition here when your dead is true
    live();
}, 4000);

live();

DEMO