JeffreyZhao/wind

关于for和if的} 后加分号的奇怪现象

Closed this issue · 4 comments

发现一个比较奇怪的现象。由于我用了一个小工具把以前是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 () {
};

forEach不行那是by design的,$await只能直接用在Jscex.compile的函数里,你这已经是另一个函数了。第二个问题我检查下,第三个问题属于Jscex的bug,目前编译器缺少单元测试,我正在准备重新优化下Jscex,并做完整的单元测试,发布0.7.0版本。

第二个问题, 可以把 statements.length 单独定义变量解决

var statelength = statements.length;
for (var i = 0; i < statelength; i++) {

@terminus318 哎,这是为什么?我看看去,多谢……

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.