uni-app 多个action时无法在before里面抛异常
uni-app 多个action时无法在before里面抛异常
操作步骤:
module.exports = {
before: async (state, event) => {
throw new Error('TOKEN_INVALID')
},
after: async (state, event, error, result) => {
if (error) {
throw error
}
}
}
预期结果:
# 实际结果:
```RT
# bug描述:
同时多个action存在,那么无法在before里面抛异常,只能在after里面抛,请处理
举例: action=“action1,action2”
在action1,action2 里面的 before里面抛 throw,则无法正常抛出
更多关于uni-app 多个action时无法在before里面抛异常的实战教程也可以访问 https://www.itying.com/category-93-b0.html
2 回复
设计如此,before里面抛出错误之后数据库操作就不会执行,然后错误被传递到after内处理。单个action的时候错误也是由你的after抛出的,而不是before
更多关于uni-app 多个action时无法在before里面抛异常的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在 uni-app 中,当使用多个 action 时,确实存在 before 钩子内抛出的异常无法被正常捕获和处理的问题。这是因为多个 action 的执行机制导致的。
问题分析:
- 多个 action 并行执行时,before 钩子中的异常可能被后续的 action 执行流程覆盖
- 异常处理机制在多个 action 场景下存在缺陷
- after 钩子作为最后执行阶段,异常处理相对稳定
临时解决方案:
module.exports = {
before: async (state, event) => {
// 改为返回错误标识,在 after 中统一处理
return { error: new Error('TOKEN_INVALID') }
},
after: async (state, event, error, result) => {
// 处理 before 返回的错误
if (result && result.error) {
throw result.error
}
// 处理原有的错误
if (error) {
throw error
}
}
}

