Skip to content

Promise.any

Promise.all相反,这是只要有一个成功,那就是成功;只有所有的都 fulfilled 才失败

主要区别于Promise.all()

Promise.all()

  • 只要有一个 reject 那么就立即结束

Promise.allSettled()

  • 不管各自的处理结果,而是等所有的都执行结束才返回

Promise.any()

  • 只要有一个 resolve 那就返回这个 resolve 的结果,所有的都 reject 才返回 error

语法

js
Promise.any(iterable)

栗子

js
const pErr = new Promise((resolve, reject) => {
  reject("总是失败")
})

const pSlow = new Promise((resolve, reject) => {
  setTimeout(resolve, 500, "最终完成")
})

const pFast = new Promise((resolve, reject) => {
  setTimeout(resolve, 100, "很快完成")
})

Promise.any([pErr, pSlow, pFast])
  .then(value => {
    console.log(value)
    // pFast fulfils first
  })
  .catch(err => {
    console.log(err)
    // 结果为 : AggregateError: All promises were rejected
  })
// 期望输出: "很快完成"

返回结果

成功了则返回第一个成功的结果值

失败了则在 catch 中返回一个 AggregateError 实例,这是 Error 的子类

如:

  • 成功: 很快完成

image-20220831135823981

  • 失败: AggregateError: All promises were rejected

重点

  1. Promise.allPromise.allSettled不同的是其返回结果是resolve的值