javascript - 使用 .catch 代替 try/catch 块
问题描述
try/catch
在发送如下请求时,而不是使用传统的方法来处理错误
let body;
try {
const response = await sendRequest(
"POST",
"/api/AccountApi/RefundGetStatus",
JSON.stringify(refundParams),
undefined,
headers
);
body = response.body;
} catch (error) {
log("error", "An error occurred sending a request", { error });
throw createError("An error has occurred", DefaultErrors.API_ERROR);
}
我在想是否可以像下面这样重写错误处理来实现相同的结果。
const response = await sendRequest(
"POST",
"/api/AccountApi/RefundGetStatus",
JSON.stringify(refundParams),
undefined,
headers
).catch((err: any) => {
log("error", "An error occurred sending a request", { err });
throw createError("An error has occurred", DefaultErrors.API_ERROR);
});
上面的代码块是否能够处理未定义的错误,也许还有JSON.parse
错误?
解决方案
你可以同时使用
try {
await sendRequest()
} catch (err) {
// do something
}
或者
sendRequest().catch(err => { // do something})
捕捉错误。
下面是一个简单的示例,您可以将其粘贴到typescript playgound中尝试一下。
const sendRequest = (str: string) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('get response');
reject('error message');
}, 2000)
})
}
const test1 = async ()=> {
try{
await sendRequest('data');
} catch (err) {
// will print 'err===> error message'
console.log('err===>', err)
}
}
const test2 = async ()=> {
sendRequest('data').catch(err => {
// will print 'err===> error message'
console.log('err=====>', err)
})
}
test1();
test2();
test1() 和 test2() 都会捕获错误。
推荐阅读
- python - 在 sns.heatmap(...) 中使用 square=True 时增加图形大小
- python - 用一行代码绘制重新采样的时间序列面积图?
- javascript - Sequelize 自定义验证 - 无法访问实体中的所有字段
- python - Matplotlib 中补丁的平滑颜色变化动画
- typescript - 在 Typescript 中使用数组初始化 Map:new Map([[k1, v1], [k2, v2]])
- java - 移除模拟器上的 Google Play 服务
- ruby-on-rails - Ruby 中的 JSON 反序列化
- jupyter-notebook - 为什么用 xeus-cling 激活 Jupyter 失败
- autohotkey - 如何有“输入”(或者它是上下文?)依赖热字符串/热键?
- c - 使用指针将字符存储在数组中