Promise、Generator函数、async/await异步函数的应用
Promise
Promise是什么?
- Promise是JS中进行异步操作的新的解决方案,在旧的回调函数的形式中,当后一个异步请求的参数依赖于前一个异步请求的结果时,就会出现层层嵌套的情况,使得代码维护性变得比较差。
- Promise可以很好的解决这个回调问题,then的链式调用使得Promise的结构层次很清晰,async和await能使代码的运行变成同步。
- Promise支持链式调用,解决了回调地狱问题。
什么是回调地狱?
回调函数嵌套调用,外部回调函数异步执行的结果是嵌套的回调执行的条件
Promise
对象代表一个异步操作,有三种状态:pending
(进行中)、fulfilled
(已成功)和rejected
(已失败)
一个 Promise
必然处于以下几种状态之一:
案例:
1 | let A = new Promise((resolve , reject) =>{ |
- 1、执行了
resolve
,Promise状态会变成fulfilled
,即 已完成状态 - 2、执行了
reject
,Promise状态会变成rejected
,即 被拒绝状态 - 3、Promise只以
第一次为准
,第一次成功就永久
为fulfilled
,第一次失败就永远状态为rejected
- 4、Promise中有
throw
的话,就相当于执行了reject
Generator
- Genertor 函数是es6 新增的一种异步编程的解决方案,语法和传统的函数完全不同;Genertor 函数的最大的特点就是可以交出函数的执行权,即暂停执行。
- 声明Genertor函数的时候,要在function关键字和函数名之间加一个星号:*,比如 function *fn()
- Generator函数封装了多个内部状态,通过yield表达式定义内部状态,执行时返回一个迭代器对象。
Generator的使用
1 | // 加入星号,表示Genertor函数 |
调用 Generator 函数,返回一个遍历器对象,代表 Generator 函数的内部指针。以后,每次调用遍历器对象的next方法,就会返回一个有着value和done两个属性的对象。value属性表示当前的内部状态的值,是yield表达式后面那个表达式的值;done属性是一个布尔值,表示是否遍历结束。
async/await
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 AliveSeven's Blog!
评论