用法:
可以写一些异步的代码
async/await特点:
1.async/await更加语义化,async 是“异步”的简写,async function 用于申明一个 function 是异步的; await,可以认为是async wait的简写, 用于等待一个异步方法执行完成;
2.async/await是一个用同步思维解决异步问题的方案(等结果出来之后,代码才会继续往下执行)
3.可以通过多层 async function 的同步写法代替传统的callback嵌套
async function语法
自动将常规函数转换成Promise,返回值也是一个Promise对象;
只有async函数内部的异步操作执行完,才会执行then方法指定的回调函数;
异步函数内部可以使用await;
例子:
async function add(x){
let a=1;
return x+a;
}
console.log(add(10))
打印出来的结果:
await语法
await 放置在Promise调用之前,await 强制后面点代码等待,直到Promise对象resolve,得到resolve的值作为await表达式的运算结果;
await只能在async函数内部使用,用在普通函数里就会报错;
例子:
function pm(){
return new Promise(function(resolve,reject){
resolve('promise value:1')
})
}
async function test(){
let a=await pm();
let b=await 'not promise value:2';
console.log(a);
console.log(b);
return a+b;
}
运行结果为:
错误处理
在async函数里,无论是Promise reject的数据还是逻辑报错,都会被默默吞掉,所以最好把await放入try{}catch{}中,catch能够捕捉到Promise对象rejected的数据或者抛出的异常
例子:
function timeout(ms) {
return new Promise((resolve, reject) => {
setTimeout(() => {reject('error')}, ms); //reject模拟出错,返回error
});
}
async function asyncPrint(ms) {
try {
console.log('start');
await timeout(ms); //这里返回了错误
console.log('end'); //所以这句代码不会被执行了
} catch(err) {
console.log(err); //这里捕捉到错误error
}
}
asyncPrint(1000);
大概就这些吧,以后get到再补充