async

async

async可以看做是 Generator 函数的语法糖。

var asyncRead = async function () {
  var f1 = await 12*12;
  var f2 = await 14*13;
  console.log(f1.toString());
  console.log(f2.toString());
};
var res=asyncRead();
//144
//182

async函数自带执行器,与普通函数一模一样,只要一行。不像Generator函数,需要调用next方法。

yield命令后面只能是 Thunk 函数或 Promise 对象,而async函数的await命令后面,可以是Promise 对象和原始类型的值。

async函数返回的是 Promise 对象,可以使用then方法添加回调函数。

// 函数声明
async function foo() {}

// 函数表达式
const foo = async function () {};

// 对象的方法
let obj = { async foo() {} };
obj.foo().then(...)

Promise 对象

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

如果不想后序的代码中断,可以使用try...catch结构。

或者后面添加一个catch方法:

async 函数的实现原理

async 函数的实现原理,就是将 Generator 函数和自动执行器,包装在一个函数里。

spawn函数就是自动执行器:

Last updated

Was this helpful?