暂停 - 恢复用户提供的javascript的执行

时间:2012-08-31 04:03:06

标签: javascript ajax interpreter resume

我在网上四处搜索,但也许我只是在问一个错误的东西而谷歌给我错误的答案:)

我有一个基于AJAX的工具,用于测试API诉讼(它不是像soapUI这样的许多可用工具之一,虽然目的有点类似)。它有许多“预先打包”的API模板,开发人员可以在编写后端代码时使用它们。

到目前为止,当用户选择要测试的API时,如果需要修改请求的文本并启动API,我可以在此交互模式下使用阻塞或非阻塞的AJAX调用。它完成后会显示一个结果。同样,这部分可以很容易地同步或异步完成。

一旦我完成了这个基本功能,我就会发现eval()用户提供的代码非常简单,它可以做的不仅仅是单个API请求,有效地构建了一个可以进行流量测试的工具(因此,可以编写几行“代码”进行登录,获取用户详细信息,然后执行其他一些API)。

我的工具定义了一个简单的API调用函数,它基本上接受一个参数 - 要调用的API的名称(其余数据来自各种表单数据)。很明显,对于用户的JS代码可以做什么几乎没有限制 - 例如,它可以在循环中调用API。

这是我遇到障碍的地方。我目前被迫通过阻塞的AJAX调用来运行我的API请求,因为我必须暂停用户的脚本执行,直到该API完成。 API的本质是,以前的API通常需要在下一个API运行之前返回结果(例如,“获取用户详细信息”必须等待“登录”API调用完成)。

使用非阻塞的AJAX,我试图“剪切”代码并在调用回调函数后执行“其余部分”,但很容易看出这在一般情况下不能很好地工作 - 当“cut”恰好位于代码块内时,如if-else或循环。

尝试手动解析并快速执行JS成为创建我自己的VM的一般问题,这绝对超出了我愿意花在这上面的努力量(除非我认为它值得一年两次一心一意,但为此我可能需要赢得彩票。)

我的问题是 - 是否有一种(最好是优雅的?)方法来暂停脚本的执行,同时允许用户提供一个“简单”的线性代码,该代码就像单线程执行一样运行?

0 个答案:

没有答案