让前端飞程序员Web前端之路

ES6 async 函数

2018-05-20  本文已影响27人  tiancai啊呆

是什么

async函数就是将 Generator 函数的星号(*)替换成async,将yield替换成await,仅此而已。

使用

async函数内部return语句返回的值,会成为then方法回调函数的参数。

async function f() {
  return 'hello world';
}

f().then(v => console.log(v))   //hello world

async函数内部抛出错误,会导致返回的 Promise 对象变为reject状态。抛出的错误对象会被catch方法回调函数接收到。

async function f() {
  throw new Error('出错了');
}

f().then(
  v => console.log(v),
  e => console.log(e)      // Error: 出错了
)

只有async函数内部的异步操作执行完,才会执行then方法指定的回调函数。
await命令后面是一个 Promise 对象。如果不是,会被转成一个立即resolve的 Promise 对象。
只要一个await语句后面的 Promise 变为reject,那么整个async函数都会中断执行。为了代码还能继续执行,我们可以将await命令放在try...catch代码块中。

async function f() {
  await Promise.reject('出错了');
  await Promise.resolve('hello world'); // 不会执行
}

f().then(
  v => console.log(v),
  e => console.log(e)          //出错了
)

async function f() {
  try {
    await Promise.reject('出错了');
  } catch(e) {
    console.log(e)     //出错了
  }
  return await Promise.resolve('hello world');
}

f().then(
  v => console.log(v),       //hello world
  e => console.log(e)       
) 

注意点

上一篇下一篇

猜你喜欢

热点阅读