Promise 类方法和实例方法

26 年 1 月 20 日 星期二
540 字
3 分钟

3 个对象方法和 6 个类方法

3个对象方法

  • then
  • catch
  • finally

6个类方法

1. Promise.resolve()

js
const p1 = Promise.resolve(111)
const p2 = new Promise((resolve, reject) => {
  resolve(111)
})
// p1 相当于 p2

2. Promise.reject()

js
const p1 = Promise.reject(222)
const p2 = new Promise((resolve, reject) => {
  reject(222)
})
// p1 相当于 p2

3. Promise.all()

接收一组 promise ,当所有 promise 的状态都为 fulfilled 时,返回结果;

如果其中一个 promise 的状态变成 rejected ,则执行 onRejected

4. Promise.allSettled()

接收一组 promise ,等待返回所有 promise 执行结果,无论失败或成功

失败的结果也将在 then 中返回,而不是在 catch

js
const p1 = new Promise((resolve, reject) => {
  setTimeout(() => {
    reject('执行失败1')
  }, 1000)
})
const p2 = new Promise((resolve, reject) => {
  setTimeout(() => {
    reject('执行失败2')
  }, 2000)
})
Promise.allSettled([p1, p2]).then((res) => {
  console.log(res) // 2s后返回
  // [ {status: 'rejected', reason: '执行失败1' }, {status: 'rejected', reason: '执行失败2'} ]
})

5. Promise.race()

接收一组 promise ,只要有一个 promise 执行完成无论拒绝或敲定,就会返回 promise 的结果

js
const p1 = new Promise((resolve, reject) => {
  setTimeout(() => {
    reject('执行失败1')
  }, 1000)
})
const p2 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('执行成功2')
  }, 2000)
})
const p3 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('执行成功3')
  }, 3000)
})

Promise.race([p2, p3, p1])
  .then((res) => {
    console.log(res)
  })
  .catch((err) => {
    console.log(err) // 执行失败1
  })

Promise.race([p3, p2])
  .then((res) => {
    console.log(res) // 执行成功2
  })
  .catch((err) => {})

6. Promise.any()

接收一组 promise ,只要有一个 promise 最先执行完成状态为 fulfilled 执行成功,promise 结果返回

js
const p1 = new Promise((resolve, reject) => {
  setTimeout(() => {
    reject('执行失败1')
  }, 1000)
})
const p2 = new Promise((resolve, reject) => {
  setTimeout(() => {
    reject('执行失败2')
  }, 2000)
})
const p3 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('执行成功3')
  }, 3000)
})
const p4 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('执行成功4')
  }, 4000)
})

Promise.any([p1, p2, p3, p4])
  .then((res) => {
    console.log(res) // 执行成功3
  })
  .catch((err) => {})

Promise.any([p1, p2])
  .then((res) => {
    console.log(res)
  })
  .catch((err) => {
    console.log(err) // AggregateError: All promise were rejected
    console.log(err.errors) // ['执行失败1', '执行失败2']
  })

当所有 promise 的返回 都为 reject 时,执行 onRejected,返回一个由 AggregateError 实例 提供的错误信息 AggregateError: All promise were rejected

文章标题:Promise 类方法和实例方法

文章作者:Sirui Chen

文章链接:https://blog.siruichen.me/posts/promise_%E7%B1%BB%E6%96%B9%E6%B3%95%E5%92%8C%E5%AE%9E%E4%BE%8B%E6%96%B9%E6%B3%95[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。