老师,如果一个错误分开写是不是就能捕获多次同一个错误了

老师,如果一个错误分开写是不是就能捕获多次同一个错误了

 const delay = ms => {
return new Promise(resolve => {
setTimeout(resolve, ms);
});
};

const p1 = delay(1000).then(() => {
console.log('p1 完成了');

// return 'p1';
return Promise.reject('reason');
});
const p1err=p1.catch(err=>console.log(err+"错误"))
// .catch(err => {
// console.log('p1', err);
// });
const p2 = delay(2000).then(() => {
console.log('p2 完成了');

return 'p2';
// return Promise.reject('reason');
});
// // .catch(err => {
// // console.log('p2', err);
// });

const allPromise = Promise.all([p1, p2]);
allPromise
.then(datas => {
console.log(datas);
})
.catch(err => console.log(err));

// 错误既可以单独处理,也可以统一处理
// 一旦被处理,就不会在其他地方再处理一遍
const p1err=p1.catch(err=>console.log(err+"错误"))

上述代码在p1后面加了一个捕获p1错误的语句,输出结果为

p1 完成了 
reason错误
reason
p2 完成了

​这样的话,为什么是同一个错误,可以被捕获两次。

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,如果一个错误分开写,可以多次捕获错误,并不是同一个错误,而是捕获代码执行时对应的错误。例如:同学粘贴的代码中,捕获的是不同位置使用p1产生的错误,两处的错误并不是同一个错误

http://img1.sycdn.imooc.com//climg/606584f8091a2c2208890728.jpg

2、为什么捕获两次,可以参考第一条解析理解。

祝学习愉快~

  • 席萌萌 提问者 #1

    老师,p1的输出语句

    console.log('p1 完成了');

    实际上只执行了一次,为什么这里是使用了两次p1呢


    2021-04-01 17:08:06
好帮手慕慕子 2021-04-01 18:12:04

同学你好, 因为console.log('p1 完成了')这句代码是在调用delay方法对应的then中的回调函数中执行的,与p1使用了几次是没有任何关系的,所以只会输出一次。

此时p1保存的是then的回调函数中return返回的Promise.reject('reason');,可以输出查看下此时p1保存的内容,示例:

http://img1.sycdn.imooc.com//climg/60659c0f09648bce09580293.jpg

此时p1保存的就是一个失败状态的Promise对象(也就是调用delay方法对应的then中return返回的结果),如下图所示:

http://img1.sycdn.imooc.com//climg/60659c1c093d279d09810257.jpg

祝学习愉快~

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师