动态暂停执行用户提交的 Javascript 代码

问题描述

我正在开发一款在沙盒环境中动态执行用户提交的 Javascript 代码的游戏。

用户脚本可能如下所示:

function main() {
  console.log("before foo");
  foo();
  console.log("after foo");
}

foo 是我向用户公开的一个函数,用于在游戏中执行某​​些操作。该操作需要几秒钟才能完成。

我想在不阻塞游戏引擎的情况下暂停用户脚本的执行,直到操作完成。

如果我是代码的作者,这是一项微不足道的任务 - 我可以简单地使用 awaityield。但我宁愿不把这个要求强加给用户,因为这会使脚本在语法上变得笨拙。此外,在游戏逻辑中,foo 异步是没有意义的。

本质上,我需要动态“生成”Javascript 代码。

一种方法是使用 esprima 等库将脚本解析为 AST,在需要的地方动态插入 yield/await 表达式,然后重新生成代码,以便它看起来像这样:

function* main() {
  console.log("before foo");
  yield foo();
  console.log("after foo");
}

但是这个问题有更简单的解决方案吗?也许我忽略了一些 Javascript 功能或 npm 库。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)