javascript - 在 Javascirpt 中从返回的承诺中捕获错误
问题描述
我在服务模块的 Vuejs 应用程序中有以下方法:
static async tenantsByRoles(roles) {
const promises = [];
roles.forEach((role) => {
promises.push(this.fetch(role.tenantCode));
});
const tenants = await Promise.all(promises);
return tenants.map(tenant => new Tenant(tenant.data));
}
我需要做的是捕捉任何错误,特别是任何调用this.fetch(role.tenantCode))
:
static async fetch(tenantCode) {
return await super.perform(axios.get(ServiceUrlProvider.myUrl().concat('/tenant/').concat(tenantCode)));
}
因为其中一些将是 404(不幸的是,这是我无法控制的)。
我这样修改以附加一个.catch()
方法Promise.all()
static async tenantsByRoles(roles) {
const promises = [];
roles.forEach((role) => {
promises.push(this.fetch(role.tenantCode));
});
const tenants = await Promise.all(promises)
.catch((e) => {
console.log(e);
});
return tenants.map(tenant => new Tenant(tenant.data));
}
但什么都没有被.catch()
. 我想要做的是捕捉 404 抛出的错误并抑制它们。从我读过的内容来看,我做得catch()
正确,但它不起作用。
我也尝试过单独解决承诺,像这样
static async tenantsByRoles(roles) {
const promises = [];
roles.forEach((role) => {
promises.push(this.fetch(role.tenantCode));
});
const tenants = [];
promises.forEach((promise) => {
const resolved = Promise.resolve();
});
// const tenants = await Promise.all(promises);
return tenants.map(tenant => new Tenant(tenant.data));
}
但我不确定resolve()
在这种情况下要传递什么。这是我第一次深入了解 Promise,所以我试图弄清楚这一切。
解决方案
您无需在 fetch 方法中等待您的承诺。它可以返回承诺(我猜 super.perform() 是一个承诺),这将由 Promise.all() 等待。
static fetch(tenantCode) {
return super.perform(axios.get(ServiceUrlProvider.myUrl().concat('/tenant/').concat(tenantCode)));
}
然后为了捕获任何错误,无论是对应于您的函数的异步性质还是同步 javascript 错误,您都可以简单地使用 try/catch。能够使用这种语法捕获异步错误是 async/await 语法的众多优点之一。
static async tenantsByRoles(roles) {
try {
const promises = roles.map((role) => {
return this.fetch(role.tenantCode)
});
const tenants = await Promise.all(promises);
return tenants.map(tenant => new Tenant(tenant.data));
} catch (e) {
//handle your error here
console.error(e)
}
}
推荐阅读
- reactjs - 如何停止共享 react-table v7 useTable 状态?
- node.js - 检查用户是否经过身份验证的中间件功能
- api - 长期运行http请求的平台?
- javascript - Vue挂载没有得到回调
- php - PHP | 如何防止关联数组/多维数组中的重复/重复数组元素?
- r - r 函数 requirenamespace() 是什么意思?
- python - 如何从 python 中的 1 个问题添加到 2 个列表
- python - 用于黑盒功能的 MILP 求解器
- elasticsearch - 更改 Filebeat 配置以添加字段
- python - 需要帮助集成 Flask 和 Stripe