gpt4 book ai didi

javascript - 如何使用 async/await 构造 try/catch?

转载 作者:行者123 更新时间:2023-12-01 01:00:32 27 4
gpt4 key购买 nike

我有以下代码,经过简化以省略不必要的内容:

try {
const response = await axios.put(url, {});
if ( response.status === 200 ) {
MicroService.action(data);
}
} catch ( error ) {
// user is not signed in, so send to create-account/sign-in
if (error.status === 401) {
MicroService.otherAction(data);
} else {
console.error(`The server returned an unexpected ${error.status} error upon attempting to hit ${url}`);
}
}

问题是catch子句还捕获第四行 MicroService.action(data) 中发生的任何错误。 。我只想想捕获第 2 行 axios 调用的错误,不应消除其他错误。

但是如果我选择MicroService.action(data)并将其移至 catch 之后,那么即使try也会发生失败了,这是错误的。仅当 try 时才会发生这种情况成功。

我可以在 try 中设置一个变量条款,例如if (response.status === 200) let success = true; ,然后检查 catch 之后的变量条款。但除了最简单的情况之外,这感觉很困惑且不优雅。

有更好的方法吗?

最佳答案

避免 vexing exceptions通过覆盖 validateStatus打回来。如果 401 状态代码是预期结果,则将其视为预期结果,并允许正常抛出其他意外状态代码:

const response = await axios.put(url, {}, {
validateStatus (status) {
return [200, 401].includes(status);
}
});

switch (response.status) {
case 200:
MicroService.action(data);
break;
case 401:
MicroService.otherAction(data);
break;
}

如果您不希望任何状态代码引发错误,请向 switch 语句添加 default 情况:

const response = await axios.put(url, {}, {
validateStatus () {
return true;
}
});

switch (response.status) {
case 200:
MicroService.action(data);
break;
case 401:
MicroService.otherAction(data);
break;
default:
console.error(`The server returned an unexpected ${response.status} error upon attempting to hit ${url}`);
break;
}

关于javascript - 如何使用 async/await 构造 try/catch?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56119616/

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