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)
})
只常的情况下,会输出111和222.
但是你中断了Promise,让Promise的状态是padding
所以只能够输出111了。
222不能够输出。
遇见问题,这是你成长的机会,如果你能够解决,这就是收获。
作者:晚来南风晚相识
出处:https://www.cnblogs.com/IwishIcould/
本文版权归作者所有,欢迎转载,未经作者同意须保留此段声明,在文章页面明显位置给出原文连接
如果文中有什么错误,欢迎指出。以免更多的人被误导。
出处:https://www.cnblogs.com/IwishIcould/
想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,或者关注博主,在此感谢!
万水千山总是情,打赏5毛买辣条行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主(っ•̀ω•́)っ✎⁾⁾!
想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!
支付宝
微信
如果文中有什么错误,欢迎指出。以免更多的人被误导。