首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无限循环保护

无限循环保护
EN

Stack Overflow用户
提问于 2019-03-06 15:33:31
回答 1查看 672关注 0票数 2

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

代码语言:javascript
复制
while (1) {
    doSomething();
}

我想将代码转换为如下所示:

代码语言:javascript
复制
var start = Date.now();
while (1) {
    if (Date.now() - start > 1000) { break; }
    doSomething();
}

我偶然发现了网页制作人which has a function that does exactly this。我无法获得函数来转换传入的代码。我尝试过addInfiniteLoopProtection('while (1) doSomething()', { timeout: 1000 }),但它返回'while (1) doSomething()',而不是更改代码以打破无限循环。

Here's my attempt on codepen

EN

回答 1

Stack Overflow用户

发布于 2019-03-08 04:43:15

我找到loop-protect了。通过npm安装Babel单机版和环路保护:

代码语言:javascript
复制
npm i @babel/standalone loop-protect

然后添加JavaScript代码:

代码语言: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()')返回字符串:

代码语言:javascript
复制
var _LP = Date.now();

while (1) {
  if (Date.now() - _LP > 100) break;
  doSomething();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55017794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档