0

我在网上到处搜索,但也许我只是问错了,谷歌给我回了错误的答案:)

我有一个基于 AJAX 的工具,用于测试 API 套件(它不是诸如soapUI 之类的众多可用工具之一,尽管目的有些相似)。它有许多“预打包”的 API 模板,开发人员可以在编写后端代码时使用这些模板。

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

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

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

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

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

试图快速手动解析和执行 JS 成为创建我自己的虚拟机的一个普遍问题,这绝对超出了我愿意为此付出的努力(除非我认为值得一年两年的全神贯注,但为此我可能需要中彩票)。

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

4

0 回答 0