11

情况是:

用户编写了一些 js 代码,它应该在一些数据上运行(本地)。

但有时会有无限循环或递归调用……这就是为什么我需要限制函数的执行时间而不是编辑函数本身(即使这样——我应该在每个序列点之后插入检查吗?但是递归调用呢? )

这个奇怪的问题还有其他解决方案吗?也许 eval 可以给出一些代码的解析树或类似的东西?

4

2 回答 2

6

A possible solution is using Web Workers. A web worker is started in a separate thread and can be terminated.

var worker = new Worker('my_task.js');
...
worker.terminate();

Downside is that not all browsers support Web Workers.

于 2013-01-12T22:02:35.310 回答
1

这是在浏览器中还是在节点中?

在浏览器中,您可以将代码放在 0 秒setTimeout内以释放运行循环(并暂时解除对浏览器的阻塞)

setTimeout(function() {
   // your code here
}, 0)

node 有一些更漂亮的东西,看起来像这样并且稍微好一点:

process.nextTick(function() {
   // frees up the run loop even faster
});
于 2013-01-12T22:00:31.550 回答