async
1.概念
async…await是基于promise的generator语法糖,它用来等待promise的执行结果,常规函数使用await没有效果;
async修饰的函数内部return不会得到预期的结果,会得到一个promise对象;
await等待的promise结果是resolve状态的内容,reject状态的内容需要使用try…catch获取,
await关键字必须要出现在async修饰的函数中,否则报错。
主要来说 async函数的特点是
1.获取promise中的resolve状态或者是reject状态
2.async函数的返回值是一个promise
3.程序一旦触碰到await 程序陷入阻塞状态 知道将await右面的表达式执行完毕
2.应用
// async函数的返回值都是一个promise
// async function fn(){
// console.log('你好');
// }
// console.log(fn());
// async函数中的await能够获取promise的状态 不需要then和catch
let promise = new Promise((resolve,reject)=>{
resolve('成功')
})
async function fn(){
let v1 = await promise
console.log(v1);
}
fn();
// async函数中存在await 如果程序碰到await 那么陷入阻塞状态
let p1 = new Promise((resolve,reject)=>{
setTimeout(() => {
resolve('这是p1 1s');
}, 1000);
})
let p2 = new Promise((resolve,reject)=>{
setTimeout(() => {
resolve('这是p2 3s');
}, 3000);
})
let p3 = new Promise((resolve,reject)=>{
setTimeout(() => {
resolve('这是p3 2s');
}, 2000);
})
// 这种方式 最先执行的是p2
// p1.then(d=>console.log(d));
// p2.then(d=>console.log(d));
// p3.then(d=>console.log(d));
// 如果说 我们使用async函数
async function test(){
let v1 = await p1;
console.log(v1);
let v2 = await p2;
console.log(v2);
let v3 = await p3;
console.log(v3);
}
test();