一:Promise是什么?
Promise是解决回调地域的异步解决方案。
注:Promise是最早由社区提出和实现的一种解决异步编程的方案,比其他传统的解决方案(回调函数和事件)更合理和更强大。ES6将其写进了语言标准,统一了用法,原生提供了Promise对象。ES6规定,Promise对象是一个构造函数,用来生成Promise实例。
注:什么是回调地域?回调地域是函数中嵌套函数的情况被称为回调地域。回调地域是实现代码循序执行而出现的一种操作,它会造成我们的代码可读性非常差,后期不好维护。
二、Promise的两个特点
1:Promise有三种状态:pending(进行中)、fulfilled(已成功)、rejected(已失败)。
2:Promise的状态一旦改变,就不会再变,任何时候都可以得到这个结果,状态不可逆,只能由pending变成fulfilled或者由pending变成jejected。
三:Promise的方法
Promise实例方法:
1:then()得到异步任务的正确结果
2:catch()获取异常信息、
3:finally()成功与否都会执行
promise对象方法:
1:Promise.all()并发处理多个异步任务,所有任务都执行完成才能得到结果(同时请求多个接口)
2:Promise.race()并发处理多个异步任务,只要有一个任务完成就能得到结果
3:Promise.resolve()返回一个Promise对象,该对象被解析为给定的值
4:Promise.reject()返回一个Promise对象,该对象被解析为给定的错误
5:Promise.any()与Promise.all()相反,Promise.any()接收一个Promise可迭代对象,只要其中的一个Promise成功,就返回那个已经成功的 promise。
四、Promise的三个缺点
1:无法取消Promise,一旦新建它就会立即执行,无法中途取消
2:如果不设置回调函数,Promise内部抛出的错误,不会反映到外部
3:当处于pending状态时,无法得知目前进展到哪一个阶段,是刚刚开始还是即将完成
五:Promise在哪存放成功回调序列和失败回调序列?
1:onResolvedCallbacks 成功后要执行的回调序列 是一个数组
2:onRejectedCallbacks 失败后要执行的回调序列 是一个数组
以上两个数组存放在Promise 创建实例时给Promise这个类传的函数中,默认都是空数组。
每次实例then的时候 传入 onFulfilled 成功回调 onRejected 失败回调,如果此时的状态是pending 则将onFulfilled和onRejected push到对应的成功回调序列数组和失败回调序列数组中,如果此时的状态是fulfilled 则onFulfilled立即执行,如果此时的状态是rejected则onRejected立即执行
上述序列中的回调函数执行的时候,是有顺序的,即按照顺序依次执行