上一篇《让 Generator 自启动》介绍了通过起动器让 Generator 跑起来,而本篇采用 async 实现更优雅的异步编程。
从例子开始
借用上一篇例子中的例子说起。
1 | function* gen() { |
然后,我们需要写一个启动器来启动这个函数。
而采用 async 写,代码则是:
1 | async function gen() { |
直接运行了,无须写生成器来运行了,而代码仅仅是 *
改为 async
, yield
改为 await
而已。
所以本质上讲:async 就是 Generator 的语法糖。
多任务处理
多任务处理有个坑,就是不能直接在 forEach
, map
之类的方法里处理,否则会报错或者得到错误的结果。
1 | function sleep(t) { |
小结
async 没多大的变动,归根结底就是个语法糖,帮助我们运行生成器,而不需要我们自己写起动器了。
不过效果确实非常好,让异步编程更加的同步
了。