gpt4 book ai didi

javascript - 在catch中的return语句之后仍然执行代码吗?

转载 作者:行者123 更新时间:2023-12-01 11:10:57 26 4
gpt4 key购买 nike

console.log('1');
await get()
.then()
.catch(() => {
console.log('2');

return;
});
console.log('3');

为什么控制台记录 1 2 3?我想在return语句之后,代码不会被执行?

最佳答案

return只会终止当前函数。这里,被 return 终止的函数是 .catch打回来。

由于.catch返回一个已解决的 Promise,await ed Promise 链将在 catch 时解析。解决。

如果要在 catch 时停止外部函数运行,有你的catch返回您在外面检查的东西,例如:

(async() => {
console.log('1');
const result = await Promise.reject()
.catch(() => {
console.log('2');

return 2;
});
if (result === 2) {
return;
}
console.log('3');
})();


或者有 .catch抛出一个错误,使得外部 Promise 链拒绝。因为它是 await ed,然后整个外部 Promise 将拒绝:

const fn = async () => {
console.log('1');
const result = await Promise.reject()
.catch(() => {
console.log('2');
throw new Error();
});
console.log('3');
};

fn()
.then(() => console.log('resolved'))
.catch(() => console.log('rejected'))


如果您的 .catch没有做任何实质性的事情,但是您想要这种行为,通常最好完全忽略它。这样,当出现错误时, await ed Promise 将拒绝,函数将终止,并且错误可以被适当的消费者捕获。

const fn = async () => {
console.log('1');
const result = await Promise.reject();
console.log('3');
};

fn()
.then(() => console.log('resolved'))
.catch(() => console.log('rejected'))

关于javascript - 在catch中的return语句之后仍然执行代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60647291/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com