设计并实现Promise.race()

本文深入探讨了Promise.race()方法的原理与应用。该方法接收一组Promise实例,当其中一个实例状态改变时,返回的新Promise实例也会随之改变。文章通过实现代码与测试示例,展示了如何使用Promise.race()来处理并发的异步操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原理:
Promise.race方法将多个Promise实例,包装成一个新的Promise实例。

const p = Promise.race([p1,p2,p3])

只要p1p2p3之中有一个实例率先改变状态,p的状态就跟着改变。那个率先改变的Promise实例的返回值,就传递给p的回调函数。

实现代码:

Promise._race = promises => new Promise((resolve,reject) =>{
    promises.forEach(promise => {
        promise.then(resolve,reject)
    })
})

测试代码:

// 通过定时器来控制那个状态率先改变
let p1 = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve('success')
    }, 600)
})
let p2 = new Promise((resolve, reject) => {
    setTimeout(() => {
        reject('failed')
    }, 500)
})

const p = Promise._race([p1,p2])

p.then(res=>{
    console.log(res)
}).catch(err=>{
    console.log(err)
})

输出结果:

[Running] node "d:\VSCode\workspace\刷题\ES6\Promise\race.js"
failed

[Done] exited with code=0 in 0.882 seconds
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值