简体中文
小程序平台的错误信息,大多返回的格式是errCode和errMsg。但不同的小程序平台,返回的errCode有可能不一样。
在实际开发中,uni-app引擎、三方插件、开发者自己的业务代码,都会返回错误,但errCode也可能彼此冲突。
在统一的错误拦截和uni统计中,混乱的errCode会造成很多问题。
很多错误是由更底层的错误引发的,但只暴露最外层错误难以入手排查,需要暴露更底层的错误。
为了进一步规范错误信息格式,uni-app定义了更完善的错误规范:
从2022-11-11起,DCloud新增的所有API将使用这套uni错误规范。同时我们推荐所有的插件作者也使用这套规范,在errSubject中声明自己的插件id。
所有异步API,都应通过callback回调返回错误,在回调函数参数中包含错误信息,回调函数参数为UniError类型
完整错误类型定义如下:
//源错误信息
interface SourceError {
message: string,
subject?: string,
code?: number,
cause?: SourceError | UniAggregateError
}
//Uni聚合源错误信息
interface UniAggregateError extends SourceError {
errors: Array<SourceError|UniAggregateError>
}
//uni错误信息
interface UniError {
errSubject: string,
errCode: number,
errMsg: string,
data?: Object,
cause?: SourceError | UniAggregateError
}
//回调函数
function CallBack(err:UniError){
//console.log(JSON.stringify(res));
}
用于保存引起错误的源错误,如app端三方SDK的错误信息,包括以下属性:
注意
源错误可以根据业务情况扩展其它属性,如uni-AD中,可以添加slotId来表示聚合的三方广告位标识
用于保存多个源错误,如app端某个错误可能是由多个三方SDK的错误引起,可将多个源错误组成UniAggregateError对象。 包括以下属性:
Uni统一错误信息,用于统一各平台(端)错误信息
当源错误存在多个时,需要将SourceError封装到AggregateError对象中,按以下方式获取SourceError数组:
function CallBack(err:UniError){
var cerrs:SourceError[] = err.cause.errors;
}
errSubject属性值表示返回错误的调用模块名称。
模块名称 | 描述 |
---|---|
uni-runtime | app端SDK运行环境错误 |
uni-secure-network | 安全网络 |
uni-ad | uni-AD |
uni-push | UniPush |
uni-login | OAuth(登录鉴权) |
uni-verify | 一键登录 |
注意
在uni-app、uni-app x中的错误信息建议统一使用UniError对象,以便在发生错误时统一捕获处理,特别是以下情况:
在App端,UniError和SourceError都是从uts的Error继承。
UniError对象必须通过 new 操作符构造
语法
new UniError()
new UniError(errSubject:string, errCode:number, errMsg:string)
参数
示例
//创建一个UniError
let error = new UniError("uni-apidName", 60000, "Custom uni error");
//设置data数据(可选)
error.data = {
"dataName": "custom data value"
};
当错误信息是有三方SDK或其它模块引起时,可以将三方SDK或其它模块的错误信息封装在SourceError中作为UniError的源错误
语法
new SourceError()
new SourceError(message:string)
参数
示例
//创建一个SourceError
let sourceError = new SourceError("Third SDK error message");
//创建一个UniError
let error = new UniError("uni-apidName", 60000, "Custom uni error");
//设置源错误
error.cause = sourceError;
当错误是由多个SourceError源错误引起时,可以将多个源错误放到一个UniAggregateError对象中
语法
new UniAggregateError(errors:Array<SourceError>)
参数
示例
//创建UniAggregateError
let aggregateError = new UniAggregateError([new SourceError("First 3rd SDK error message"), new SourceError("Second 3rd SDK error message")]);
//创建一个UniError
let error = new UniError("uni-apidName", 60000, "Custom uni error");
//设置源错误
error.cause = aggregateError;