关于 return 语句无法正常返回和终止脚本的问题
集算器版本:202050313-20250318
问题说明
通过 http-post 访问时,在 if 语句块里本应执行了 return,但并没有正确返回和终止脚本,通过 IDE 正常执行。
脚本和执行场景
通过 http post 执行脚本,argpost 接收并处理参数。
脚本报错的主要逻辑:
在 A18 单元格通过 obj.field(name)==null 判断字段是否存在
在 B19 打印了提示“不支持的命令 1 xxx”
在 B20 执行 return 返回
在 A21 执行 =obj.${name}
后台日志打印出了“不支持的命令 1 xxx”
随后在 A21 单元格报错“xxx 字段不存在”
很显然 B20 位置 return 并没有按照预期返回并终止脚本的执行,并导致 A21 报错。
因为都是在公司内网,手机浏览器和微信上又都没法上传图片,主要的场景和错误信息都在上面的描述中了。
SPL 可以返回多次返回多个结果,存储过程接口有这个需要,但存储过程接口是知道要取几个,就不会觉得混乱。
大多数情况取到第一个返回值就结束了,第二个 return 也执行不到。
但 HTTP 协议需要第二个返回决定 header,于是就会尝试取第二个返回值,事先并不知道有没有这个 header,结果就出现混乱,这还没办法消除。
只能自己多写个 else if 吧。
脚本写的规范一些可以避免这种问题,也可以使用 end 语句明确结束程序,像 A6 这种省略了 else 的写法在 http 中 A7 就会被执行到
咱这个有说明文档么
好像没有地方明确说第一种就是规范的,第二种就不规范,甚至“函数参考.chm”那个帮助文档就是用的第二行代码块的写法。
也没有不规范,这种用法都是正确的,return 后就结束了。只是 HTTP 协议有点古怪,得自己绕一下