Promise(五)

Promise的类方法

  1. 定义:可以直接通过Promise类直接调用的方法

Promise.resolve()

  1. 使用: 将现有结果直接转变成一个fulfilled状态的promise对象返回
    const fulPromise = Promise.resolve({name:'nano'})
    fulPromise.then( res => console.log(res)  ) 
    --> { name:'nano' }

Promise.reject()

  1. 使用: 将现有结果直接转变成一个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()

  1. 定义: 传入一个数组promise,等所有数组中的所有promise参数都执行成功之后进入fulfilled状态,返回值是一个结果对应的数组,如果数组中任意一个promise参数执行失败,则直接进入rejected状态
  2. 使用场景: 多个接口并发
    Promise.all([promise1,promise2,promise3])
      .then(res => {console.log(res)},err => {})
      -->[res1,res2,res3]

    注意: 进入rejected状态不意味着promise全部执行结束并且拿不到成功调用的promise的结果

Promise.allSettled [ES11]

  1. 定义: 必须等到所有promise对象有结果才会返回,无论是fulfilled状态还是rejected,都会进入fulfilled状态,该方法最终只有fulfilled状态
  2. 使用场景:解决多个接口并发且其中某个接口报错也不会影响其它结果执行
  3. 使用: 如果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()

  1. 定义: 传入一个数组promise,哪一个promise对象先有结果那么就直接返回该promise对象结果,无论是fulfilled状态还是rejected状态
  2. 使用场景: 图片限时加载,如果超过定时器设置的加载时间,就抛出异常
Promise.race( [ p1,p2] ).then( res =>{},err => {} )

注意: 即使返回了结果,也并不意味着其它的promise对象终止执行

Promise.any() [ES12]

  1. 定义: 传入一个数组promise,只要有一个promise对象返回fulfilled状态,那么整个Promise类返回fulfilled状态,必须全部promise对象都是rejected状态才会返回rejected状态
Promise.any( [ p1,p2] ).then( res => {},err => {} )

注意: 即使返回了结果,也并不意味着其它的promise对象终止执行


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!