uni-app App端 Error无法获取到cause

uni-app App端 Error无法获取到cause

开发环境 版本号 项目创建方式
Mac macOS 14.4.1 CLI
Android Android 14
小米
Redmi K50 Ultra
产品分类:uniapp/App

PC开发环境操作系统:Mac

手机系统:Android

手机系统版本号:Android 14

页面类型:vue

vue版本:vue3

打包方式:云端

CLI版本号:vite 5.2.8

示例代码:
onShow(() => {  
    try {  
        throw new Error('全局错误处理', { cause: 333 });  
    } catch (error) {  
        console.log(error.cause, 'error.cause', error); //error.cause真机运行安卓App为undefined  
    }  
})
操作步骤:
onShow(() => {  
    try {  
        throw new Error('全局错误处理', { cause: 333 });  
    } catch (error) {  
        console.log(error.cause, 'error.cause', error); //error.cause真机运行安卓App为undefined  
    }  
})
预期结果:

输出error.cause为333

实际结果:

真机运行安卓App为undefined,h5和微信小程序正常输出333

bug描述:

更多关于uni-app App端 Error无法获取到cause的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app App端 Error无法获取到cause的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是一个已知的兼容性问题。在Android平台的JavaScript环境中,Error构造函数的第二个参数(包含cause属性的options对象)支持不完整,导致无法正确获取cause属性。

解决方案:

  1. 使用自定义错误类替代:
class CustomError extends Error {
    constructor(message, cause) {
        super(message);
        this.cause = cause;
    }
}

onShow(() => {  
    try {  
        throw new CustomError('全局错误处理', 333);  
    } catch (error) {  
        console.log(error.cause, 'error.cause', error);
    }  
})
  1. 使用额外属性存储cause值:
onShow(() => {  
    try {  
        const error = new Error('全局错误处理');
        error.cause = 333;
        throw error;
    } catch (error) {  
        console.log(error.cause, 'error.cause', error);
    }  
})
回到顶部