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

wait是等待的意思。

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();

posted @ 2021-12-18 17:48  钰抌  阅读(136)  评论(0)    收藏  举报