Promise(五)
Promise的类方法
- 定义:可以直接通过Promise类直接调用的方法
Promise.resolve()
- 使用: 将现有结果直接转变成一个fulfilled状态的promise对象返回
const fulPromise = Promise.resolve({name:'nano'}) fulPromise.then( res => console.log(res) ) --> { name:'nano' }
Promise.reject()
- 使用: 将现有结果直接转变成一个rejected状态的promise对象返回
let obj={name: 11} let promiseFn=Promise.reject(obj) promiseFn.then(res => { console.log(res); },err => { console.log(err); --> { name: 11 } })
注意: reject方法无论传入的promise对象还是普通的值,都是直接进入rejected状态阶段,直接返回传入的值,不会因为传入了一个promise对象而继续向下判断
Promise.all()
- 定义: 传入一个数组promise,等所有数组中的所有promise参数都执行成功之后进入fulfilled状态,返回值是一个结果对应的数组,如果数组中任意一个promise参数执行失败,则直接进入rejected状态
- 使用场景: 多个接口并发
Promise.all([promise1,promise2,promise3]) .then(res => {console.log(res)},err => {}) -->[res1,res2,res3]
注意: 进入rejected状态不意味着promise全部执行结束并且拿不到成功调用的promise的结果
Promise.allSettled [ES11]
- 定义: 必须等到所有promise对象有结果才会返回,无论是fulfilled状态还是rejected,都会进入fulfilled状态,该方法最终只有fulfilled状态
- 使用场景:解决多个接口并发且其中某个接口报错也不会影响其它结果执行
- 使用: 如果promise对象返回的是fulfilled状态,结果则是 { status: ‘fulfilled’, value: resolve的结果 };如果是rejected状态,结果则是 { status:’rejected’, reason: reject的结果 }
let obj={name: 11}
let promiseFn=Promise.resolve(obj)
let promiseFn2=Promise.reject(obj)
let promiseFn3=Promise.reject(obj)
Promise.allSettled([promiseFn,promiseFn2,promiseFn3])
.then(res => {console.log(res)},err => {console.log(err)})
res --> [
{ status: 'fulfilled', value: { name:11 } },
{ status: 'rejected', reason: { name:11 } },
{ status: 'rejected', reason: { name:11 } }
]
Promise.race()
- 定义: 传入一个数组promise,哪一个promise对象先有结果那么就直接返回该promise对象结果,无论是fulfilled状态还是rejected状态
- 使用场景: 图片限时加载,如果超过定时器设置的加载时间,就抛出异常
Promise.race( [ p1,p2] ).then( res =>{},err => {} )
注意: 即使返回了结果,也并不意味着其它的promise对象终止执行
Promise.any() [ES12]
- 定义: 传入一个数组promise,只要有一个promise对象返回fulfilled状态,那么整个Promise类返回fulfilled状态,必须全部promise对象都是rejected状态才会返回rejected状态
Promise.any( [ p1,p2] ).then( res => {},err => {} )
注意: 即使返回了结果,也并不意味着其它的promise对象终止执行
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!