Promise
一、语法
new Promise(function(resolve,reject){
...
}/* executor */)
- 参数
- executor是带有
resolve
和reject
两个参数的函数
- Promise构造函数执行时立即调用executor函数
- resolve和reject函数被调用时,分别将promise的状态改编为fulfilled(成功)和rejected(失败)
- 如果executor函数跑出一个错误,那么该promise状态为rejected
二、描述
- 一个promise有以下集中状态:
- pending 初始状态
- fulfilled 操作成功
- rejected 操作失败
三、方法
-
Promise.all(iterable)
- 返回一个新的promise对象,该promise对象在iterable参数对象里所有的promise对象都成功的时候才会触发成功,一旦有任何一个iterable里面的promise对象失败则立即触发该promise对象的失败。
- 新的promise对象在触发成功状态以后,会把一个包含iterable里所有promise返回值的数组作为成功回调的返回值,顺序跟iterable的顺序保持一致;如果这个新的promise对象触发了失败状态,它会把iterable里第一个触发失败的promise对象的错误信息作为它的失败错误信息
- Promise.allSettled(iterable)
-
Promise.any(iterable)
- 接收一个Promise对象的集合,当其中的一个promise 成功,就返回那个成功的promise的值。
- Promise.race(iterable)
- 接收一个Promise对象的集合,当其中的一个promise 成功,就返回那个成功的promise的值。
-
Promise.reject(reason)
- 返回一个状态为失败的Promise对象,并将给定的失败信息传递给对应的处理方法
-
Promise.resolve(value)
- 返回一个状态由给定value决定的Promise对象。
- 如果你不知道一个值是否是Promise对象,使用Promise.resolve(value)来返回一个Promise对象,这样就能将该value以Promise对象形式使用。
四、创建Promise
- 创建
const myPromise = new Promise((resolve,reject)=>{
// resolve(someValue) => fulfilled
// or
// reject(failure reason) => rejected
})
- 想要某个函数拥有promise的功能,只要让其返回一个promise即可
function fn(){
return new Promise((resolve,reject)=>{
// ...
})
}
- 错误捕获
new Promise((resolve,reject)=>{
resolve()
}).then(res=>{
}).catch(err=>{
//catch如果不再抛出错误的话也会返回一个promise对象,且是resolve状态
}).then(res=>{
//如果有错误且catch执行之后没有再抛出新错误就会执行该处的语句
}
- then()
- .then()函数如果返回新的promise,那么下一级.then()会在新的promise状态改变后做出响应
- .then()函数如果返回其他任何值,那么下一级.then()会立即执行