2

我正在开发 JavaScript 代码编辑器,用户可以在其中在浏览器中编写自己的 JavaScript 代码并运行它。我需要找到一种方法来打破无限循环。当我得到代码时:

while (1) {
    doSomething();
}

我想将代码转换成这样的:

var start = Date.now();
while (1) {
    if (Date.now() - start > 1000) { break; }
    doSomething();
}

我偶然发现了 Web-Maker,它的功能正是如此。我无法获得转换传入代码的函数。我已经尝试过addInfiniteLoopProtection('while (1) doSomething()', { timeout: 1000 }),但它返回'while (1) doSomething()'而不是更改代码以跳出无限循环。

这是我对codepen的尝试

4

1 回答 1

1

我找到了循环保护。通过 npm 独立安装 Babel 并进行循环保护:

npm i @babel/standalone loop-protect

然后添加 JavaScript 代码:

import Babel from '@babel/standalone';
import protect from 'loop-protect';

const timeout = 100;
Babel.registerPlugin('loopProtection', protect(timeout));

const transform = source => Babel.transform(source, {
  plugins: ['loopProtection'],
}).code;

transform('while (1) doSomething()')返回字符串:

var _LP = Date.now();

while (1) {
  if (Date.now() - _LP > 100) break;
  doSomething();
}
于 2019-03-07T20:43:14.620 回答