浅谈Promise怎么取消或中断

本文介绍了三种有效的Promise中断或取消方案:通过返回pending状态的Promise对象、使用Promise.race竞速方法以及在Promise链中抛出错误来实现。这些方法能够帮助开发者在特定条件下停止Promise的执行流程。

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

用了这么久的Promise,写一下他的几种中断或者取消方案吧。

1、Promises/A+标准:原Promise对象的状态将跟新对象保持一致。

利用这一特性,当新对象保持“pending”状态时,原Promise链将会中止执行。

Promise.resolve().then(() => {
    console.log('ok1')
    return new Promise(()=>{})  // 返回“pending”状态的Promise对象
}).then(() => {
    // 后续的函数不会被调用
    console.log('ok2')
}).catch(err => {
    console.log('err->', err)
})
复制代码

2、Promise.race竞速方法

利用这一特性,也能达到后续的Promise不再执行

let p1 = new Promise((resolve, reject) => {
    resolve('ok1')
})

let p2 = new Promise((resolve, reject) => {
    setTimeout(() => {resolve('ok2')}, 10)
})

Promise.race([p2, p1]).then((result) => {
    console.log(result) //ok1
}).catch((error) => {
    console.log(error)
})
复制代码

3、当Promise链中抛出一个错误时,错误信息沿着链路向后传递,直至被捕获。

利用这一特性能跳过链中被捕获前的函数的调用,直至链路终点。

Promise.resolve().then(() => {
    console.log('ok1')
    throw 'throw error1'
}).then(() => {
    console.log('ok2')
}, err => {     
    // 捕获错误
    console.log('err->', err)
}).then(() => {   
    // 该函数将被调用
    console.log('ok3')
    throw 'throw error3'
}).then(() => {
    // 错误捕获前的函数不会被调用
    console.log('ok4')
}).catch(err => {
    console.log('err->', err)
})
复制代码

小马,献丑了,欢迎大家指出错误,一起交流交流。

喜欢的点个赞吧。 大家加油!

转载于:https://juejin.im/post/5cc093635188252e754f2239

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值