async和await

Posted 还是不会呀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了async和await相关的知识,希望对你有一定的参考价值。

在async和await出来之前,异步回调的方法就有
1、回调嵌套
2、Promsie的链式回调
3、Generator的复杂繁琐调用方式

async/await采用同步的思维来解决异步问题的方式,使代码的可读性更强了。

async的使用

在函数的function关键字前加上 async,该函数就变成了 异步函数

该函数和普通函数的区别:

  • 异步函数的返回值是一个Promsie对象,相当于返回的值包裹在了Promise.resolve()内进行返回的
  • 异步函数内可以使用await关键字

async函数内抛出错误,是通过返回值的Promsie对象catch进行捕获。

1、返回一个普通的值或者对象

async function foo() 
  return "fzb";


foo().then((res) => 
  console.log(res); // "fzb"
);

2、返回一个Promise对象

async function foo() 
  return new Promise((resolve, reject) => 
    // resolve("fzb");
    reject("error message");
  );


foo()
  .then((res) => 
    console.log(res); // "fzb"
  )
  .catch((error) => 
    console.log(error); // "error message"
  );

3、返回一个实现了thenable的对象

async function foo() 
  return 
    then: (resolve, reject) => 
      resolve("fzb");
    ,
  ;

foo().then((res) => 
  console.log(res); // fzb
);

await的使用

await关键字只能在async内进行使用。

async function foo() 
  // 1、await后面接一个普通的值或者对象
  const res1 = await "fzb";
  console.log(res1); // "fzb"
  const res2 = await  name: "fzb" ;
  console.log(res2); //  name: 'fzb' 

  // 2、await后面接着一个thenable对象,若是reject状态那么异步函数返回的promise对象catch进行捕获错误
  const res3 = await 
    then: function (resolve, reject) 
      resolve("fzb");
      //   reject("error message");
    ,
  ;
  console.log(res3); // "fzb"

  // 3、await后面接着一个Promsie对象,若是reject状态那么异步函数返回的promise对象catch进行捕获错误
  const res4 = await new Promise((resolve, reject) => 
    resolve("fzb");
    // reject("error message");
  );
  console.log(res4); // "fzb"

foo()
  .then((res) => 
    console.log("res:", res); // res: undefined
  )
  .catch((err) => 
    console.log("err:", err); // err: error message
  );

以上是关于async和await的主要内容,如果未能解决你的问题,请参考以下文章

async和await用法

Kotlin 协程(三) async和await

async 与await 解决异步接口返回数据不能赋值的妙用

c# await 不能作用于 async上?

promise与async和await的区别

async和await浅析