5分钟彻底搞懂Promise,你真的懂Promise吗?
promise是什么?
当一个请求需要依赖上一个请求的结果,就会形成如上回调地狱。 Promise的诞生是为了解决回调地狱。
Promise的使命:优雅的去表示异步回调。
丰富的想像:把promise当成养猪场。
Promise一个构造函数。接收一个函数类型的参数,这个函数类型的参数又接收resolve和reject这2个参数。
分别对应成功和失败时的回调。
new Promise相当于养了一头新猪,它有2中结果,要么养成,要么夭折。无论哪种状态都会执行相应的方法。
const promise = new Promise(function(resolve, reject) {
// ... some code
if (养成){
resolve(value);
} else {//夭折
reject(error);
}
});
为了很好的控制异步操作,设置了3中状态:
三种状态:pending(进行中) fulfilled(已成功) rejected(已失败)
存在状态机制:
为了更好控制异步,产生了3个实例方法:
3个实例方法:then、catch、finally
.then()
- 支持链式调用,then严重依赖上一步结果
.catch()
- 每一步都写reject方法麻烦,所以catch方法捕获resolve时的异常。
.finally()
- 无论成功和失败都要执行的方法。
Promise静态方法
Promise.all()
:所有Promise对象 都成功才执行
所有猪都长大才执行成功,任意一头猪夭折则执行失败。
Promise.allSettled()
:所有Promise对象 不论成功还是失败都执行
所有猪都有结果了就行,无论长成还是失败。
Promise.any()
:只要 任意1个Promise对象 成功就执行
任意一头猪养成了就执行。
Promise.rarc()
:任意一个Promise对象 只要有结果就执行,不管成功还是失败
任意一头猪养成或夭折了都执行
Promise.resolve
:返回一个状态为resolve的Promise对象
Promise.reject(reason)
: 返回一个状态为rejected的Promise对象
一步一叩首,今天的自己比昨天好一点就行,明天的自己需追寻