含义
定义:是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有很多种使用形式,例如: