1. async await定义:
- asyne表示异步函数,await表示等待可以理解为 async wait。async 可以用来声明异步方法,await 是用来等待异步方法的执行。
- async作为关键字放在函数的前面,表示这个函数是异步函数,而且异步函数不会阻塞后面的代码,await是等待异步方法执行完成。
- async 等待一个 Promise 对象,这个Promise对象可能是resolve也可能是reject,那么此时就会恢复执行,并且阻塞后面的代码执行。
2. async/await用法:
async的用法很简单,在函数的前面加上async将该函数转换为异步函数
那我们在换一种方法,在 async 的后面添加一行打印
这里我们发现 getNum 威慑么没有返回呢?带着这个问题我们打印看一下
打印后我们看到他其实是返回了一个 Promise 对象,包含 State 和 Result,State表示的是Promise返回的状态,fulfilled表示成功的状态,而Result表示返回的内容。如果有返回值就调用该函数内部用 resole() 将它转换为 Promise 对象并返回。那我们怎么让他抛出一个错误呢?
通过创建新的错误,我们发现State的状态变为了 rejected,rejected表示失败的状态
3. 异常捕获
如果Promise对象抛出 rejected 错误我们可以将 await放在 try...catch...里面进行捕获
4.多发请求合并
在我们初始化时需要获取多个接口页面数据时,请求并不会一起请求,而是等到第一个请求返回后,才会请求第二个请求,这样我们的页面加载时间过长,容易产生回调地狱的问题。
解决这个问题我们可以将多个请求可以使用 await Promise.all( promises ) 这个方法里面,此时我们在刷新页面,从控制台网络时间线发现多个请求一起请求,从而解决了回调地狱的问题