async函数

async函数:多个异步操作,包装成的一个Promise对象,而await命令就是内部then命令的语法糖

语法糖:计算机语言中添加的某种语法,对语言的功能没有影响,但是更方便程序员使用。其能增加程序的可读性,减少代码出错的机会

async函数将Generator函数的星号*替换成async,将yield换成await,对Generator函数的改进体现在:

1、内置执行器:Generator函数的执行必须靠执行器,需要调用co模块或者next()非法。而async函数被调用就会自动执行得到最后结果

2、语义清晰:async表示函数里有异步操作,await表示紧跟在后面的表达式需要等待结果

3、适应性广:co模块中yield命令后面只能是Thunk函数或Promise对象,而async函数的await命令后面可以是Promise对象和原始类型的值(数值、字符串和布尔值,但这时等同于同步操作)

4、返回值是Promise对象,用then方法来指定下一步操作:Generator函数的返回值是Iterator对象

async函数用法:返回一个Promise对象,使用then方法添加回调函数。当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句。

例:

async function getStockPriceByName(name) {
  const symbol = await getStockSymbol(name);
  const stockPrice = await getStockPrice(symbol);
  return stockPrice;
}

getStockPriceByName('goog').then(function (result) {
  console.log(result);
});

上面代码是一个获取股票报价的函数,函数前面的async关键字,表明该函数内部有异步操作。调用该函数时,会立即返回一个Promise对象。

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

例:

async function fn(args) {
  // ...
}

// 等同于

function fn(args) {
  return spawn(function* () {
    // ...
  });
}

所有的async函数都可以写成上面的第二种形式,其中的spawn函数就是自动执行器。

猜你喜欢

转载自blog.csdn.net/qq_36688143/article/details/81387312