Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
91 lines (66 sloc) 1.87 KB

Async function 在 2017 年已到达了 stage 4。

async/await 使用注意点

  • 为了不让程序挂掉,注意捕获错误

写法 1:用 try/catch 捕获

async function test1() {
  try {
    await Promise.reject(new Error('boom'))
  } catch(e) {
    console.log(e)
  }
  console.log('go on')
}

test1()
// Error: boom
// go on

写法 2:直接在 await 后面的 promise 上进行 catch

async function test2() {
  await Promise.reject(new Error('boom')).catch(e => console.log(e))
  console.log('go on')
}

test2()
// Error: boom
// go on
  • 使用并行提高程序的运行速度
// 串行调用示范
async function block() {
  const result1 = await request(url1)
  const result2 = await request(url2)
}

在如上案例中,request(url1) 请求未完成的话是不会发起 request(url2) 请求的,类似串行调用,可以作如下修改,使之变为并行调用:

写法1:

async function block() {
  const promise1 = request(url1)
  const promise2 = request(url2)
  const result1 = await promise1
  const result2 = await promise2
}

写法2:

async function block() {
  const [result1, result2] = await Promise.all(request(url1), request(url2))
}

async 函数的实现原理

async function fn {

}

async 函数在低版本浏览器中其实就是转为 Promise + Generator

function fn {
  return co(function* () {

  })
}

关于简版 co,可以看在 Generator 函数的异步应用 的实现。

异步遍历器

proposal-async-iteration,异步遍历器也已经到了 stage 4,日后补充。