ES-async
一:
1.async函数;
通过async关键字来修饰函数,
async函数的返回值为:promise;async函数的return的内容,会成为promise成功状态的数据
//async函数
async function fn1() {
console.log(1);
}
async function fn2() {
console.log(2);
return 'hello';
}
// let v1=fn1();
// console.log(v1);//Promise {<fulfilled>: undefined}
let rst = fn2();
console.log(rst);//Promise {<fulfilled>: 'hello'}
rst.then(data => {
console.log(data);
}).catch(err=>{
console.log(err);
});
2.await
1)await必须用于async函数内部
2)await具有等待异步代码执行的功能
3)await可以解析promise成功的结果(不能解析失败的结果)
async function fn1() {
console.log(1);
return 'hello';
}
// fn1().then(rst=>{//promise成功的结果
// console.log(rst);
// })
// await fn1();//报错
async function getRst() {
let v = await fn1();//解析promise成功的结果,赋值给变量v
console.log(v);
};
await搭配promise;
let p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(10);
}, 1000);
});
// p1.then(rst=>{}).catch(err=>{})//传统方案
async function fn() {
let v = await p1;//解析promise成功的解构
console.log(v);
}
fn();
await遇到promise失败的状态:
let p1 = new Promise((resolve, reject) => {
setTimeout(() => {
// resolve(10);
reject(100)
}, 1000);
});
// p1.then(rst=>{}).catch(err=>{})//传统方案
//解决方案一:
async function fn() {
try {
let v = await p1;//解析promise成功的解构
console.log(v);
} catch (e) {
console.log('收到错误:', e);
}
}
//解决方案二:
async function fn(){
let v=await p1.catch(err=>{//捕获错误、异常、失败
console.log(err);
});
console.log(v);
}
解决回调地狱;
let p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(10)
}, 1000);
});
let p2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(20)
}, 500);
});
let p3 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(30)
}, 2000);
});
async function fn(){
let v1=await p1;
let v2=await p2;
let v3=await p3;
console.log(v1);
console.log(v2);
console.log(v3);
}
fn();
浙公网安备 33010602011771号