问题描述
我正在开发一款在沙盒环境中动态执行用户提交的 Javascript 代码的游戏。
用户脚本可能如下所示:
function main() {
console.log("before foo");
foo();
console.log("after foo");
}
foo
是我向用户公开的一个函数,用于在游戏中执行某些操作。该操作需要几秒钟才能完成。
我想在不阻塞游戏引擎的情况下暂停用户脚本的执行,直到操作完成。
如果我是代码的作者,这是一项微不足道的任务 - 我可以简单地使用 await
或 yield
。但我宁愿不把这个要求强加给用户,因为这会使脚本在语法上变得笨拙。此外,在游戏逻辑中,foo
异步是没有意义的。
本质上,我需要动态“生成”Javascript 代码。
一种方法是使用 esprima 等库将脚本解析为 AST,在需要的地方动态插入 yield
/await
表达式,然后重新生成代码,以便它看起来像这样:
function* main() {
console.log("before foo");
yield foo();
console.log("after foo");
}
但是这个问题有更简单的解决方案吗?也许我忽略了一些 Javascript 功能或 npm 库。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)