Promise的异常穿透和中断Promise的链式请求

1.Promise的异常穿透

1==》当你使用Promise的then,进行链式调用的时候,可以在最后指定失败的回调
2==》前面任何操作出现了异常,都会传递到最后失败的回调中进行处理;

Promise的异常穿透和 p.then(resolve=>{ do someting success thing},err=>{ do someting fil thing})
是不同的哈
promise的异常穿透是进行链式调用的时候才会出现异常穿透;

2.Promise的异常穿透demo

let p = new Promise((resolve, reject) => {
    setTimeout(() => {
        reject('第一种err');
    }, 2000)
})
p.then(res => {
    console.log(111); //2s后不会输出111
}).then(res => {
    console.log(222); //2s后不会输出222
}).catch(err => {
    console.log(err) //最终直接走这里哈
})
之所以会走这里是因为,是setTimeout抛出了一个错误的异常;所以不会走then;而是直接走catch;
之所以是走catch;根据Promise的异常穿透
换一句话说就是:使用reject之后,将不会去执行then了,而是去执行catch

3.Promise的非异常穿透,对错误的处理

let p = new Promise((resolve, reject) => {
    setTimeout(() => {
        reject('第一种err');
    }, 2000)
})
p.then((res) => {
    console.log(res)
}, (err) => {
    console.log(err);//输出错误
})
4.中断Promise链式操作
let p = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve('ok');
    }, 2000)
})

p.then(res => {
    console.log(111)
    // 有且只有一种方式去中断Promise;让Promise的状态是padding
    return new Promise(() => {})
}).then(res => {
    console.log(222);
}).catch(err => {
    console.log(err)
})

只常的情况下,会输出111222.
但是你中断了Promise,让Promise的状态是padding
所以只能够输出111了。
222不能够输出。
posted @   南风晚来晚相识  阅读(615)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
历史上的今天:
2020-04-18 vue混入mixin
2020-04-18 vue mixin混入 全局混入 局部混入
点击右上角即可分享
微信分享提示