含义
定义:是Generator函数的语法糖。
如下例子:
const asyncReadFile = function* (){const f1 = yield readFile('/etc/fstab');const f2 = yield readFile('/etc/shells');console.log(f1.toString());console.log(f2.toString());}
上面是Generator函数,用async改写成如下:
const asyncReadFile = async function(){const f1 = await readFile('/etc/fstab');const f2 = await readFile('/etc/shells');console.log(f1.toString());console.log(f2.toString());}
没错,只是把 * 换成 async ,yield 换成 await 。
但作用体如下:
- async不需要next()
Generator函数的执行必须要next()方法,才会继续往下执行。但async就不需要,会自动的去执行,效果和Generator函数一样。
- 语义更清楚
async本身意思就是异步操作,而await表示紧跟后面等待结果。
- 适用性更广泛
yield命令后面只能是Promisse对象或者Thunk函数,而async函数的await命令后面,可以是除了是Promise对象还可以是原始类型的值(数值、字符串和布尔值,但会立马自动转成 resolved 的 Promise对象)
- 返回值不同
async返回值是Promise对象,而Generator函数的返回值是Iterator对象。
async也可以看做是多个异步操作的集合,包装成一个Promise对象,而await命令是内部then命令的语法糖。
用法
async函数返回一个Promise对象,可使用then方法添加回调函数。当函数执行的过程中,一旦遇到了await就会先返回,等到异步操作完成后,再接着执行函数体后面的语句。
例如:
async function getStockPriceByName(name){const symbol = await getStockSymbol(name);const stockPrice = await getStockPrice(symbol);return stockPrice;}getStockPriceByName("goog").then((result)=>{console.log(result);})
async有很多种使用形式,例如:
