1、什么是async
async其实是ES7的才有的关键字,async的意思是"异步",顾名思义是有关异步操作有关的关键字。async函数的使用方式,直接在普通函数前面加上async,表示这是一个异步函数,在要异步执行的语句前面加上await,表示后面的表达式需要等待。async是Generator的语法糖,相比较Generator函数在以下四方面做了改进。
2、优点
- Generator函数是需要调用next指令来运行异步的语句,async不需要调用next,直接像运行正常的函数那样运行就可以
- 语义化更明确,相比较于Generator的*和yield,async和await更明确。
- yield命令后面只能是 Thunk 函数或 Promise 对象,而async函数的await命令后面,可以是Promise 对象和原始类型的值(数值、字符串和布尔值,但这时等同于同步操作)。
- async直接返回一个promise对象,可以用then和cache来处理。
3、用法
- 函数声明
async function foo() {}
- 表达式声明
var bar = async function () {}
- 对象声明
var obj = {
async bazfunction(){
}
}
- 箭头函数声明
var fot = async() => { }
4、await 语句
- await后面是一个promise对象,如果不是,会转成一个resolve的promise对象
async function f() {
return await 123;
}
f().then(function (a) {
console.log(a);
})
- await后面的promise对象,如果reject,则reject参数会被cache参数接收到,写不写return都可以,并且reject下面的代码不会执行,如果想下面的代码执行,必须用try cache包住
async function a() {
try{
await Promise.reject('出错了!')
}catch (e){
return await Promise.resolve('请重新填写')
}
}
a().then(function () {
console.log(err);
}).catch(function (err) {
console.log(err);
})
上面的代码如果不用try cache包裹reject,则下面的代码不会执行,并且reject语句是不用return返回的,resolve语句是需要用return返回;
网友评论