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)
因此,有几个问题基于我要尝试做的事情。
infiniteloop变量设置为true,循环会停止吗?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);
Run Code Online (Sandbox Code Playgroud)
不确定这是最佳的,但这应该按预期工作。
使用 setTimeout 恢复循环允许主 node.js 事件循环处理其他事件,例如 w.Stop。