err-spec.md 3.7 KB
Newer Older
DCloud-yyl's avatar
DCloud-yyl 已提交
1 2
## 错误信息规范  
所有异步API,都应通过callback回调返回错误,在回调函数参数中包含错误信息,回调函数参数为UniError类型
DCloud-yyl's avatar
DCloud-yyl 已提交
3

DCloud-yyl's avatar
DCloud-yyl 已提交
4
完整错误类型定义如下:
DCloud-yyl's avatar
DCloud-yyl 已提交
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
```ts  
//源错误信息
interface SourceError {
    subject?: string,
    code?: number,
    message?: string,
    cause?: SourceError | AggregateError
}

//聚合源错误信息
interface AggregateError extends SourceError {
	errors: Array<SourceError|AggregateError>
}

//uni错误信息
interface UniError {
	errSubject: string,
	errCode: number,
	errMsg: string,
	data?: Object,
	cause?: SourceError | AggregateError
}

//回调函数
function CallBack(err:UniError){
	//console.log(JSON.stringify(res));
}
```  

### SourceError  
DCloud-yyl's avatar
DCloud-yyl 已提交
35 36 37
用于保存引起错误的源错误,如app端三方SDK的错误信息,包括以下属性:
- subject  
	源错误(如app端三方SDK)模块名称,如uni-AD中的穿山甲广告SDK的模块名称为"csj"
DCloud-yyl's avatar
DCloud-yyl 已提交
38
- code  
DCloud-yyl's avatar
DCloud-yyl 已提交
39
	源错误(如app端三方SDK)的原始错误码  
DCloud-yyl's avatar
DCloud-yyl 已提交
40
- message  
DCloud-yyl's avatar
DCloud-yyl 已提交
41
	源错误(如app端三方SDK)的原始错误描述信息  
DCloud-yyl's avatar
DCloud-yyl 已提交
42 43 44 45 46 47
- cause  
	上级源错误,只有一个源错误时是SourceError,包含多个源错误时封装成AggregateError  

**注意**  
源错误可以根据业务情况扩展其它属性,如uni-AD中,可以添加slotId来表示聚合的三方广告位标识

DCloud-yyl's avatar
DCloud-yyl 已提交
48
### AggregateError  
DCloud-yyl's avatar
DCloud-yyl 已提交
49
用于保存多个源错误,如app端某个错误可能是由多个三方SDK的错误引起,可将多个源错误组成AggregateError对象。
DCloud-yyl's avatar
DCloud-yyl 已提交
50 51 52 53
包括以下属性:
- errors  
	数组,可包含SourceError或AggregateError对象  

DCloud-yyl's avatar
DCloud-yyl 已提交
54 55 56
### UniError  
Uni统一错误信息,用于统一各平台(端)错误信息  
- errSubject
DCloud-yyl's avatar
DCloud-yyl 已提交
57
	统一错误主题(模块)名称,字符串类型,存在多级模块时使用"::"分割,即"模块名称::二级模块名称",详情参考[主题(模块)名称](#主题(模块)名称)
DCloud-yyl's avatar
DCloud-yyl 已提交
58
- errCode  
DCloud-yyl's avatar
DCloud-yyl 已提交
59
	统一错误码,数字类型,通常0表示成功,其它为错误码  
DCloud-yyl's avatar
DCloud-yyl 已提交
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
	对于已经实现的API,继续保留现有errCode规范(保留向下兼容)  
- errMsg  
	统一错误描述信息,字符串类型,应准确描述引起的错误原因  
- data  
	可选,错误时返回的数据,比如获取设备信息时,如部分数据获取成功,部分数据获取失败,此时触发错误回调,需将获取成功的数据放到data属性中  
- cause  
	可选,源错误信息,可以包含多个错误,详见SourceError


当源错误存在多个时,需要将SourceError封装到AggregateError对象中,按以下方式获取SourceError数组:
```ts
function CallBack(err:UniError){
	var cerrs:SourceError[] = err.cause.errors;
}
```


DCloud-yyl's avatar
DCloud-yyl 已提交
77 78 79
## 模块(主题)名称  

errSubject属性值表示返回错误的调用模块名称。
DCloud-yyl's avatar
DCloud-yyl 已提交
80 81 82

|模块名称|描述|
|----|----|
DCloud-yyl's avatar
DCloud-yyl 已提交
83
| uni-runtime | app端SDK运行环境错误 |
DCloud-yyl's avatar
DCloud-yyl 已提交
84 85 86 87 88 89
| uni-secure-network | 安全网络 |
| uni-ad | uni-AD |
| uni-push | UniPush |
| uni-login | OAuth(登录鉴权) |
| uni-verify | 一键登录 |

DCloud-yyl's avatar
DCloud-yyl 已提交
90

DCloud-yyl's avatar
DCloud-yyl 已提交
91
**注意**  
DCloud-yyl's avatar
DCloud-yyl 已提交
92 93 94 95 96 97 98
- uni内置模块errSubject属性值为“uni-模块英文名称”,如果英文名称由多个单词组成,单词键应该加-分割
- uni API的errSubject属性值
	+ uni.XXX API时  
	errSubject属性值为“uni-API名称”,如uni.getSystemInfo(),错误回调中errSubject属性值为“uni-getSystemInfo”  
	+ Object.XX API时  
	errSubject属性值为“uni-Object名称-API名称”,如SocketTask.onMessage(),错误回调中errSubject属性值为“uni-SocketTask-onMessage”  
- uni插件中返回错误时建议将“插件id”作为errSubject属性值,如果插件的API较多时可将每个API单独定义errSubject,建议使用errSubject属性值格式为“插件id-API名称”。  
DCloud-yyl's avatar
DCloud-yyl 已提交
99 100


DCloud-yyl's avatar
DCloud-yyl 已提交
101