async await学习笔记
定义:
一句话,async 函数就是 Generator 函数的语法糖,很多人认为async是异步的终极解决方案;
async/await是写异步代码的新方式,以前的方法有回调函数和Promise。
async/await是基于Promise实现的,它不能用于普通的回调函数。
async/await与Promise一样,是非阻塞的。
async/await使得异步代码看起来像同步代码,这正是它的魔力所在。
async/await是在Promise之后产生的,它和Promise诞生的目的都是为了解决“回调地狱”,至于什么是回调地狱:
![](https://img.haomeiwen.com/i7875167/4bf17098f8e5144b.png)
Promise改进后:
![](https://img.haomeiwen.com/i7875167/e55e50341dcf810a.png)
async/await改进后:
![](https://img.haomeiwen.com/i7875167/dd7005dd5207f095.png)
async/await是在Promise的基础上做了改进,await是接收一个Promise对象,而当Promise执行到resolve()或者reject()的时候(fulfilled和rejected),await才会继续往下执行。
所以关键点就是得是返回Promise对象的函数才行,不然await等你后面的函数执行完了,见你没返回Promise对象,那他就继续执行了,不管你了
async await的实现
同 Generator 函数一样,async 函数返回一个 Promise 对象,可以使用 then 方法添加回调函数。当函数执行的时候,一旦遇到 await 就会先返回,等到触发的异步操作完成,再接着执行函数体内后面的语句
![](https://img.haomeiwen.com/i7875167/d3ab789887aa8add.png)
上面代码是一个获取股票报价的函数,函数前面的async关键字,表明该函数内部有异步操作。调用该函数时,会立即返回一个Promise对象
下面的例子,指定多少毫秒后输出一个值:
![](https://img.haomeiwen.com/i7875167/c7cd307b5616f22e.png)
async函数
async函数会返回一个Promise对象。
如果async函数中是return一个值,这个值就是Promise对象中resolve的值;
如果async函数中是throw一个值,这个值就是Promise对象中reject的值。
举个代码:
![](https://img.haomeiwen.com/i7875167/19c626e552ef678c.png)
![](https://img.haomeiwen.com/i7875167/c9d49a54a9ae2b7d.png)
await
await会暂停当前async函数的执行,等待后面的Promise的计算结果返回以后再继续执行当前的async函数