ES2107新语法,它是Generator函数的语法糖。
generatora函数

  1. function* fn() {
  2. var f1 = yield readFile('/abc.js') // readFile()返回promise
  3. var f2 = yield readFile('/index.js')
  4. console.log(f1,f2)
  5. }

async函数

  1. async function fn() {
  2. var f1 = await readFile('/abc.js')
  3. var f2 = await readFile('/index.js')
  4. console.log(f1,f2)
  5. }

从上面写法上可以看出: async 替换 * , await 替换 yield

1 语法特性

1.1 内置执行器

generator函数需要手动调用next或者利用co模块来实现流程操作,但是async函数只需跟普通函数一样,执行
fn()

1.2 更好的语义

如上所以写法,async/await 语义更清楚

1.3 更广的实用性

如果使用co模块等自动流程管理工具,需要yield后面为Thunk函数或promise对象。
await后面可以是promise和任何原始类型值

1.4 返回promise

可以继续使用then链式调用