javascript 停止无限循环

标签 javascript node.js infinite-loop child-process

这是 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()

所以有几个问题是基于我正在尝试做的事情。

  1. 如果 infiniteloop 变量设置为 true,循环会停止吗?
  2. 如何检测无限循环?每 3 秒检查一次的东西会很好。
  3. 如果 infiniteloop 变量在同一进程中,则它在循环时不能更改。我必须将变量存储在不同的进程中吗?
  4. 任何检测到无限循环的东西都需要存在于不同的进程中吗?理想情况下,相同的过程会很好,但不管怎样?

感谢您的帮助。

最佳答案

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

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);

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

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

关于javascript 停止无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11476200/

相关文章:

c++ - 输入 2 个非常基本的 C 字符串时无限循环

javascript - 使用 javascript 查找两个对象数组中的差异

xcode - Swift 无限淡入淡出循环

javascript - 打开/关闭对话框

node.js - 使用 node js 上传文件而不使用multer

node.js - 如何使用proxyquire和mocha在单元测试中模拟方法调用时模拟时间延迟(超时)?

javascript - 在mongodb中更新时如何返回更新后的对象?

java - 使用推土机进行集合映射时无限循环

javascript - createPeriodicWave 从样本值数组

javascript - 在新窗口中弹出一个 div 但保留 css 和脚本