javascript停止无限循环

Har*_*rry 5 javascript infinite-loop child-process node.js

这是node.js。

如果满足多个条件,我的函数可能会变成无限循环。不受信任的用户设置了这些条件,因此出于此问题的目的,请假定无限循环是不可修复的。

我仍然需要一种方法来停止无限循环。

这是我想要做的一些示例代码:

var infiniteloop = false;
var condition = true
function loop () {
  while (condition) {
    console.log('hi')
    if (infiniteloop) {
      condition = false
      console.log('oh last one')
    }
  }
}

loop()
Run Code Online (Sandbox Code Playgroud)

因此,有几个问题基于我要尝​​试做的事情。

  1. 如果将infiniteloop变量设置为true,循环会停止吗?
  2. 如何检测无限循环?每3秒检查一次的东西会很好。
  3. 如果infiniteloop变量在同一进程中,则在循环时不能更改该变量。我必须将变量存储在其他过程中吗?
  4. 有什么方法可以检测到无限循环需要存在于另一个过程中?理想情况下,相同的过程会很好,但是有什么用?

谢谢你的帮助。

Jul*_*Ch. 5

基于其他建议组合的解决方案:

function Worker()
{
    this.MaxIterations = 1000000;
    this.Enabled = true;    
    this.condition = true;
    this.iteration = 0;
    this.Loop = function()
    {
        if (this.condition 
            && this.Enabled 
            && this.iteration++ < this.MaxIterations)
        {
            console.log(this.iteration);
            setTimeout(this.Loop.bind(this),0);
        }
    };  
    this.Stop = function()
    {
        this.Enabled = false;
    };
}
var w = new Worker();
setTimeout(w.Loop.bind(w), 0);
setTimeout(w.Stop.bind(w), 3000);
Run Code Online (Sandbox Code Playgroud)

不确定这是最佳的,但这应该按预期工作。

使用 setTimeout 恢复循环允许主 node.js 事件循环处理其他事件,例如 w.Stop。