瘦人说

Mr.Async中$await支持switch、property赋值

Mr.Async更新支持在switch,和property赋值语句中的$await等待语句,而且目前来说不打算支持try-catch-finally,因为还没有找到比较好的实现方式,麻烦如果哪位大虾知道怎样捕获异步异常的方式或者模型,多多赐教。

switch的case中使用

var i = 0, ret;
switch(i){
    case 0 :
        console.log('waiting for 1 second.');
        $await(delay());
        ret = 1;
        console.log('done.');
    default :
        console.log('waiting for 1 second.');
        $await(delay());
        ret = 2;
        console.log('done');
        break;
    case 1 :
        console.log('waiting for 1 second.');
        $await(delay());
        ret = 3;
        console.log('done');
        break;
}
console.log(ret);
 
// output
// waiting for 1 second.
// done.
// waiting for 1 second.
// done.
// 2

我挑选了switch testcase中一个特殊的例子,default块在中间,第一个case没有break并且匹配到变量i的值0。虽然在每个case里面都含有等待的$await,但是最终的console.log输出是在switch块执行完成之后才输出了,并且得到正确的值。

property(属性方式)赋值

之前只实现了var a = $await(delay()); 和 var a; a = $await(delay());方式的$await赋值语句,现在就支持属性赋值。如下:

var obj = { inner : {} };
// 等待delay操作,返回值为1
obj.inner.a = $await(delay());
console.log(obj.inner.a);
 
// output
// 1

以上加上的新功能都已经更新了testcase,可能还不足够,bug常常有,让它来得更加猛烈些吧。Mr.Async托管地址:https://github.com/winsonwq/Mr.Async

NEXT

下一步打算着手于基于NodeJS的AOT编译器,一步一步来。

Comments

Proudly published with Hexo