这是 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()
所以有几个问题是基于我正在尝试做的事情。
- 如果
infiniteloop
变量设置为 true,循环会停止吗? - 如何检测无限循环?每 3 秒检查一次的东西会很好。
- 如果
infiniteloop
变量在同一进程中,则它在循环时不能更改。我必须将变量存储在不同的进程中吗? - 任何检测到无限循环的东西都需要存在于不同的进程中吗?理想情况下,相同的过程会很好,但不管怎样?
感谢您的帮助。
最佳答案
基于其他建议的组合的解决方案:
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/