gpt4 book ai didi

javascript - 使用 catch 是否需要 throw

转载 作者:行者123 更新时间:2023-12-03 01:04:30 24 4
gpt4 key购买 nike

新手问题 - 我有一个程序通过 Promise/fetch 进行 API 调用。我想添加一个 catch,但我想知道我是否还需要在那里有一个 throw 语句?或者我可以单独使用 catch 吗?

最佳答案

I want to add a catch, but I'm wondering do I need to also then have a throw statement in there?

不,您不需要抛出,除非这是您想要的编程结果。

.catch() 用于“处理”被拒绝的 Promise。您自己不必使用 throw 来处理被拒绝的 Promise。

如果您想在存在被拒绝的 Promise 时执行某些代码,然后将被拒绝的 Promise 返回到,则可以将 throw.catch() 结合使用调用者,召集者。在这种情况下,你会这样做:

function someFunction() {
return fn().then(val => {
// do something here when promise resolves
return someVal;
}).catch(err => {
// do something here when promise rejects
console.log(err);
// throw the error to keep the returned promise rejected
throw err;
});
}

如果你只有一个 .catch() 而没有在其中抛出,那么被拒绝的 promise 将被视为“已处理”并且将被解决,而不是被拒绝。请注意,这与用于同步代码的 try/catch 几乎相同。

这是一个非常好的示例,您不需要使用 .catch() 进行 throw

const rp = require('request-promise');
const defaultConfig = {...};

function readRemoteConfig(url) {
return rp({url, json: true}).catch(err => {
// when remote config is not available, substitute default config
return defaultConfig;
});
}
<小时/>

仅供引用,即使您想拒绝 promise ,您也不必使用 throw 来完成此操作。您还可以返回被拒绝的 promise ,这将实现相同的结果:

function someFunction() {
return fn().then(val => {
// do something here when promise resolves
return someVal;
}).catch(err => {
// do something here when promise rejects
console.log(err);
// return rejected promise to keep the returned promise rejected
return Promise.reject(err);
});
}

无论您想这样做还是使用throw,这都是个人喜好。

关于javascript - 使用 catch 是否需要 throw,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52470840/

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