情况是:
用户编写一些js代码,应该在某些数据(本地)上运行。
但有时会出现无限循环或递归调用...这就是为什么我需要限制函数的执行时间而不是编辑函数本身(即使如此) - 我应该在每个序列点之后插入检查吗?但是递归调用?)
这个奇怪的问题还有其他解决办法吗?也许eval可以提供一些代码的解析树或类似的东西?
答案 0 :(得分:5)
可能的解决方案是使用Web Workers。 Web工作程序在单独的线程中启动,可以终止。
var worker = new Worker('my_task.js');
...
worker.terminate();
下行是not all browsers support网络工作者。
答案 1 :(得分:2)
这是在浏览器中还是在节点中?
在浏览器中,您可以将代码置于0秒setTimeout
以释放运行循环(并暂时取消阻止浏览器)
setTimeout(function() {
// your code here
}, 0)
节点有一些看起来像这样的东西,并且稍微好一点:
process.nextTick(function() {
// frees up the run loop even faster
});