关于for和if的} 后加分号的奇怪现象
Closed this issue · 4 comments
shuracwf commented
发现一个比较奇怪的现象。由于我用了一个小工具把以前是oracle存储过程的代码直接转换成Javascript用于NodeJs上跑,会自动在for{}循环后面和在if的最后的大括号}后面加上分号,如果这代码双放在jscex的异步代码中,就会报一些奇怪的错误,去掉后就没问题了。
我有一段代码,是从redis里获取出来keys后,再循环把key的值取出来,代码如下:
1、我用forEach作的话:
keys.forEach(function (key, i) {
var row = $await(cache.oper('hgetall', key));
});
编译后运行时会报:$await is not defined ,其实时编译后并没有编码这段代码。
2、我用 for (var key in keys)
,编译时就报:
for (var i = 0; i < statements.length; i++) {
TypeError: Cannot read property 'length' of undefined
3、if后面加上分号也报这种类似的错误。把分号去掉就不报错了。
if () {
};
JeffreyZhao commented
forEach不行那是by design的,$await
只能直接用在Jscex.compile
的函数里,你这已经是另一个函数了。第二个问题我检查下,第三个问题属于Jscex的bug,目前编译器缺少单元测试,我正在准备重新优化下Jscex,并做完整的单元测试,发布0.7.0版本。
terminus318 commented
第二个问题, 可以把 statements.length
单独定义变量解决
var statelength = statements.length;
for (var i = 0; i < statelength; i++) {
JeffreyZhao commented
@terminus318 哎,这是为什么?我看看去,多谢……
JeffreyZhao commented
This problem is caused by lonely semicolons as a statements. The AST would contain a blank block would make compiling fail. This issue is fixed in v0.7.0 release.