我无法正确捕获承诺链中的错误/拒绝。
const p1 = () => {
return new Promise((resolve, reject) => {
console.log("P1");
resolve();
});
};
const p2 = () => {
return new Promise((resolve, reject) => {
console.log("P2");
reject();
});
};
const p3 = () => {
return new Promise((resolve, reject) => {
console.log("P3");
resolve();
});
};
p1().catch(() => {
console.log("Caught p1");
}).then(p2).catch(() => {
console.log("Caught p2");
}).then(p3).catch(() => {
console.log("Caught p3");
}).then(() => {
console.log("Final then");
});
当 promise 被拒绝时,以下内容.then
仍然会被执行。据我了解,当在承诺链中发生错误/拒绝时,其后的.then
调用将不再执行。
P1
P2
Caught p2
P3
Final then
拒绝被正确捕获,但为什么在捕获后记录“P3”?
我究竟做错了什么?
为了澄清@evolutionxbox,这是我的预期结果:
Promise.resolve().then(() => {
console.log("resolve #1");
return Promise.reject();
}).then(() => {
console.log("resolve #2");
return Promise.resolve();
}).then(() => {
console.log("resolve #3");
return Promise.resolve();
}).then(() => {
console.log("Final end");
}).catch(() => {
console.log("Caught");
});
这段代码的工作方式与它应该的完全一样。而且我看不出我的代码有什么不同,除了我分别声明了这些函数。
无论承诺在哪里被拒绝,上面的代码都会停止。