3***@qq.com
3***@qq.com
  • 发布:2023-10-25 14:31
  • 更新:2023-10-25 15:34
  • 阅读:311

【报Bug】uni-app x中使用Promise中reject一个对象出来,无论catch中捕获的类型都是Error

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: Windows 10 家庭中文版19045.3570

HBuilderX类型: Alpha

HBuilderX版本号: 3.94

手机系统: Android

手机系统版本号: Android 12

手机厂商: 模拟器

手机机型: mumu

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

示例代码:
export class ResponseError extends Error {  
    constructor(errCode : number, errMsg : string,data:any|null) {  
        super(errMsg);  
        this.errCode = errCode;  
        this.errMsg = errMsg;  
        this.data = data  
    }  
    /**  
     * 错误代码。  
     */  
    errCode : number;  
    /**  
     * 错误消息  
     */  
    errMsg : string;  
    data ?: any | null;  
}
protected async Request2(apiPath : string, method : "GET" | "POST" | "PUT" | "PATCH" | "DELETE", data : UTSJSONObject | null) : Promise<unknown> {  
                return new Promise((resolve, reject) => {  
            // 发送请求  
            uni.request({  
                url: this.ServerAddress + apiPath,  
                data,  
                method,  
                success: (res) => {  
                    console.log(res);  
                    if (res.statusCode == 200) {  
                        resolve(res.data)  
                    }  
                    else {;  
                        reject(new ResponseError(res.statusCode,"请求异常",res.data))  
                    }  
                },  
                fail(err) {  
                    reject(new ResponseError(err.errCode,err.errMsg,err.data))  
                }  
            })  
        });  
    }  

    /**  
     * 用户登录  
     */  
    public Login(data : UTSJSONObject | null)  {  
        this.Request2("/Token", "POST", {account:'test',password:'kkk123'}).then().catch((res) => {  
            console.log(res as ResponseError);  
        })  
    }

操作步骤:

在uvue页面的onload中调用Login

onLoad() {  
            let apiRequest : ApiRequest = new ApiRequest();  
            apiRequest.Login().then()  

    }  

预期结果:

预期:在接口返回的statusCode 不为200代码时,Login方法中通过catch捕获异常,在的console.log中打印ResponseError类型数据包含statusCode,errMsg,data等。

实际结果:

UTSError(name='Error', message='请求异常', cause='null')

bug描述:

2023-10-25 14:31 负责人:DCloud_Android_DQQ 分享
已邀请:
YUANRJ

YUANRJ

直接访问下errMsg这些属性,是否符合预期

  • 3***@qq.com (作者)

    用console.log在控制台打印,打印出来的内容起始位置显示UTSError。使用类型断言把catch中捕获的res as ResponseError,在控制台打印还是只有打印出了name, message, cause三个属性。

    2023-10-25 15:37

  • 3***@qq.com (作者)

    神奇!直接访问errCode,errMsg这些属性都可以访问到。谢谢!

    2023-10-25 16:03

要回复问题请先登录注册