一、async在es6里面给它们的定义是一个函数
用法:async + fn
1.执行fn会返回一个promise对象
async function fn(){
...
}
let a = fn(); // 这里的a就是一个Promise函数
2.如果fn里有返回值的话,fn().then((data)=>{ 这里的data就是fn里返回的值})
async function fn(){
...
return 123
}
fn().then(res=>{
console.log(res); // 123
})
二、await是async里的一个命令
await一般后面是一个Promise对象,返回的是该Promise对象fulfilled/rejected状态下的结果,如果await后面不是Promise对象,则await命令不表示任何含义,该行表达式正常解读。
1.await+Promise对象
async function fn(){
let a = await Promise.resolve(123); // 等同于 await new Promise((res,rej)=>{res(123)})
return a;
}
fn().then(res=>{
console.log(a) // 123
})
2.await + 非Promise对象
async function fn(){
let a = await 1+1
return a;
}
fn().then(res=>{
console.log(res) // 2
})
三、async+await执行顺序
async function fn(){
// 实际应用中,await后面接的是一个函数,函数返回的结果是一个Promise
let a = await new Promise((res,rej)=>{
console.log(4)
res(1)
})
console.log(2)
return a
}
fn().then(data=>{
console.log(data)
});
console.log(3)
// 输出结果:
// 4
// 3
// 2
// 1
执行顺序解读