Promise.all、Promise.allSettled、Promise.race、Promise.any 区别

本文详细介绍了Promise.all、Promise.allSettled、Promise.race和Promise.any这四种方法的使用及示例,展示了它们在处理并发操作时的不同行为和返回结果。通过具体的测试代码,阐述了每个方法在遇到不同状态的Promise实例时如何响应。
摘要由CSDN通过智能技术生成

Promise.all

  • 返回所有 Promise(p1,p2,p3) 实例的新 Promise。
  • 当所有 Promise 实例都变成 fulfilled 状态,新 Promise 的状态才是 fulfilled 状态,返回所有 promise 实例的 resolve value 数组。
  • 如果有一个 Promise 实例状态是 rejected 状态,则新 Promise 的状态是 rejected,返回第一个 promise reject 的 reason。

Promise.allSettled

  • 返回所有 Promise(p1,p2,p3) 实例的新 Promise
  • 返回所有 Promise 实例执行结果数组,格式如下
[
  {status: "fulfilled", value: 1},
  {status: "rejected", reason: "error"},
  {status: "rejected", reason: 2},
]

Promise.race

  • 返回 p1,p2,p3 最先执行的 Promise 实例的 value 或者 reason,不论 fulfilled 或 rejected 状态。

Promise.any

  • 返回 p1,p2,p3 状态最先变成的 fulfilled 实例的 value,如果 p1,p2,p3 最终状态都是 reject 则返回 All promises were rejected。

测试代码

const p1 = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve(1)
    }, 1000)
})
const p2 = new Promise((resolve, reject) => {
    setTimeout(() => {
        reject('error')
    }, 500)
})
const p3 = new Promise((resolve, reject) => {
    setTimeout(() => {
        reject(2)
    }, 1500)
})

/**
 * Promise.all
 * 返回所有 Promise(p1,p2,p3) 实例的新 Promise
 * 当所有 Promise 实例都变成 fulfilled 状态,新 Promise 的状态才是 fulfilled 状态,返回所有 promise 实例的 resolve value 数组。
 * 如果有一个 Promise 实例状态是 rejected 状态,则新 Promise 的状态是 rejected,返回第一个 promise reject 的 reason。
 */
Promise.all([p1, p2, p3]).then(res => {
    console.log('Promise.all', res)
}).catch(e => {
    console.log('Promise.all', e) // Promise.all error
})

/**
 * Promise.allSettled
 * 返回所有 Promise(p1,p2,p3) 实例的新 Promise
 * 返回所有 Promise 实例执行结果数组,格式如下
 * [
 *  {status: "fulfilled", value: 1},
 *  {status: "rejected", reason: "error"},
 *  {status: "rejected", reason: 2},
 * ]
 */
Promise.allSettled([p1, p2, p3]).then(res => {
    console.log('Promise.allSettled', res) // 输出如注释
}).catch(e => {
    console.log('Promise.allSettled', e)
})

/**
 * Promise.race
 * 返回 p1,p2,p3 最先执行的 Promise 实例的 value 或者 reason,不论 fulfilled 或 rejected 状态。
 */
Promise.race([p1, p2, p3]).then(res => {
    console.log('Promise.race', res)
}).catch(e => {
    console.log('Promise.race', e) // Promise.race error
})

/**
 * Promise.any
 * 返回 p1,p2,p3 状态最先变成的 fulfilled 实例的 value,如果 p1,p2,p3 最终状态都是 reject 则返回 All promises were rejected。
 */
Promise.any([p1, p2, p3]).then(res => {
    console.log('Promise.any', res) // Promise.any 1
}).catch(e => {
    console.log('Promise.any', e)
})

// 输出顺序
// Promise.all error
// Promise.race error
// Promise.any 1
// Promise.allSettled [...]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值