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 的执行机制导致的。

问题分析:

  1. 多个 action 并行执行时,before 钩子中的异常可能被后续的 action 执行流程覆盖
  2. 异常处理机制在多个 action 场景下存在缺陷
  3. 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  
        }  
    }  
}
回到顶部