什么是Promise
简单的来说
Promise
就是带then
方法的对象或函数,用来解决回调地狱。在ES6中Promise
是一个构造函数,通过构造函数创建的实例满足Promise A+规范,并在里面实现了其他方法(all()、allSettled()、any()、race()、reject()、resolve()、withResolvers())
Promise 有三个状态
- pending(待定)
- fulfilled(完成)
- rejected(拒绝)
只能存在于三种状态的其中之一,并且在状态改变后,不可逆。
本身 Promise
是同步的,只有其回调函数才是异步的,由于回调返回的还是一个 Promise
,所以可以进行链式调用then()方法
- then()
接收两个参数,一个是成功的回调,一个是拒绝的回调,调用回调后会改变Promise
的状态 - finally()
finally
就是只有成功回调的then
方法 - catch()
catch
就是只有拒绝回调的then
方法
Promise的静态方法
控制并发的方法
- Promise.all()
传入的所有Promise
都成功的时候,该Promise
状态变为成功;当有一个拒绝时,该Promise
状态变为拒绝 - Promise.allSettled()
传入的所有Promise
状态都改变时,该Promise
状态变为成功 - Promise.any()
传入的Promise
有一个成功时,该Promise
状态变为成功;全部失败时,该Promise
状态才会变为失败。 - Promise.race()
传入的Promise
第一个Promise
状态改变的决定该Promise
的状态,与第一个Promise
状态保持一致。
其它静态方法
- Promise.reject()
返回一个新Promise
该对象以给定原因承失败状态 - Promise.resolve()
返回一个新Promise
该对象以给定值承成功状态,当这个值时携带then方法的,该Promise
采用这个值的最终状态。