Promise的实例方法

Promise.prototype.any

any的参数是一个可迭代对象, 它会返回第一个执行resolve函数的实参值,如果迭代对象的所有项执行的都是reject,那么它会抛出错误

(async ()=> {
  try{
    const result = await Promise.any(new Set([
      Promise.reject('1'),
      Promise.resolve('2')
    ]))
    console.log(result) // --->'2'
  }catch (err) {
    console.error(err)
  }
})()
(async ()=> {
  try{
    const result = await Promise.any(new Set([
      new Promise(resolve=> setTimeout(resolve, 1000, 'one')),
      Promise.resolve('two')
    ]))
    console.log(result) // --->'2'
  }catch (err) {
    console.error(err)
  }
})()
;(async ()=> {
  try{
    const result = await Promise.any(new Set([
      Promise.reject('1'),
      Promise.reject('2')
    ]))
    console.log(result) 
  }catch (err) {
    console.error(err) // ---> AggregateError: All promises were rejected
  }
})()

Promise.prototype.all

all的参数是一个可迭代对象,迭代对象必须全部执行resolve,才会返回一个所resolve实参组成的数组,否者只会执行第一个reject

;(async ()=> {
  try{
    const result = await Promise.all(new Set([
      Promise.resolve('one'),
      Promise.reject('1'),
      Promise.reject('2'),
    ]))
    console.log(result) 
  }catch (err) {
    console.error(err) // '1'
  }
})()
;(async ()=> {
  try{
    const result = await Promise.all(new Set([
      Promise.resolve('one'),
      Promise.resolve('two'),
    ]))
    console.log(result) // ['one', 'two']
  }catch (err) {
    console.error(err) 
  }
})()

 

Promise.prototype.allSettled

allSerttled的参数是一个可迭代对象,不管每一项执行了resolve还是reject都会返回一个对象,如果是resolve,则是{status: 'fulfilled', value: 'xx'},如果执行了reject,则是{status: 'rejected', reason:'xx'}

;(async ()=> {
  try{
    const result = await Promise.allSettled(new Set([
      Promise.resolve('one'),
      Promise.resolve('two'),
      Promise.reject('two'),
    ]))
    console.log(result) 
    /* 
      [
        {status: 'fulfilled', value: 'one'},
        {status: 'fulfilled', value: 'two'},
        {status: 'rejected', reason:'xx'}
      ]
    */ 
  }catch (err) {
    console.error(err) 
  }
})()

 

Promise.prototype.race

race会返回第一个resolve或者reject的实参

;(async ()=> {
  try{
    const result = await Promise.race(new Set([      
      new Promise(resolve=> setTimeout(resolve, 1000, 'hello')),
      new Promise((resolve, reject)=> setTimeout(reject, 2000, 'hi'))
    ]))
    console.log(result) //'hello'
  }catch (err) {
    console.error(err) 
  }
})()
;(async ()=> {
  try{
    const result = await Promise.race(new Set([      
      new Promise(resolve=> setTimeout(resolve, 1000, 'hello')),
      new Promise((resolve, reject)=> setTimeout(reject, 100, 'hi'))
    ]))
    console.log(result) 
  }catch (err) {
    console.error(err) // 'hi'
  }
})()

  

 

 

 

 

  

 

posted @ 2021-03-10 21:01  nextYearToday  阅读(160)  评论(0)    收藏  举报