Ascs==asC#,基于Fiber实现的类似于C#的async/await的库,摆脱callback的痛苦。
Promise大家都懂,但是在JS这个这么喜欢做轮子的领域里面不做一个好像对不起自己似的。
Ascs很简单,就3个API:
Ascs.env相当于声明这是一个异步(async)的环境,在这里面ascs才有效
Ascs.conv把一个常规的异步回调函数转换为ascs的异步函数,让你告别回调(callback必须要是最后一个参数)
Ascs.await执行ascsFunction之后会返回一个task,使用这个函数ascs.await(task)可以等待返回并且获取返回值
下面是一个简单的例子:
function delayToDo(a, b, cb) { var result = a + b; setTimeout(function() { cb(result * result); }, 1000);} var delayToDoAsync = ascs.conv(delayToDo);ascs.env(function() { // 一般写法 delayToDo(1, 2, function(r) { console.log(r); }); // ascs写法,等待返回 var result = ascs.await(delayToDoAsnc(1, 2)); console.log(result[0]); // 返回的是数组,相当于是回调函数参数})();更多例子可以看demo
常见问题:浏览器能用吗?
做的时候没想过浏览器,我又不是前端。想前后端兼容的建议用wind.js啊
和ES6兼容吗?
可以看看commit的历史,其实曾经想过兼容,但是generator的yield的作用于并不能实现像Lua那种效果,所以还是放弃了。不过由于是基于Fiber实现,基本上node/iojs都可以用。
ES7也有asyncawait,这玩意还有用吗?
等ES7出来再算吧...ES6都还没全
还有什么要说?
ascs只是一种尝试,没有什么野心,就是走心,玩玩。另外,相比起实际项目,ascs更加适合用于制作library,可以很方便为你的库提供async/await风格的接口(使用ascs.conv转换一下就好),实际项目改造起来会需要一定工作。更多请关注https://github.com/drzunny/ascs
评论