在使用部分微信小程序 API / 组件时,抛出的异常(fail 回调 / Promise reject)Error 对象中除了带有 errMsg,还会带有通用错误码 errno。
代码示例
wx.openBluetoothAdapter({
success (res) {
console.log(res)
}
fail (err) {
console.log(err.errno)
}
})
背景介绍
errno 错误码的出现是为了解决以下问题:
- 目前部分 API 在出现错误时,只返回错误信息
errMsg,没有错误码。另一部分 API 虽然有 errCode,但没有形成统一格式规范。 - 目前有 errCode 的 API 中,不同的 API 失败时返回的 errCode 粒度不同。部分 API 的 errCode 粒度太大,信息不足。
- 相同的错误在不同的 API 中 errCode 未对齐,不便于开发者记忆和处理。
因此,我们设计了一套拥有统一规范的错误码errno,以帮助开发者更好地开发调试及处理错误。
errno 错误码有如下优点:
- 在错误码格式上,拥有统一的设计规范。
- 不同的 API 中出现的相同错误,对应的错误码一致。
- 错误码中包含 API 类别信息,帮助开发者快速定位问题。
- 不同 API 中的错误码粒度较为统一。
当 Error 对象中同时有 errno 错误码和 errCode 错误码时,一般以 errno 错误码为准。
后续 errno 错误码会逐步推广到所有 API 接口,并取代现有的 errCode 参数,为开发者提供错误信息。
错误码设计
errno 错误码一般为 7 位数,第 1 – 2 位标识 API 接口的一级类目,第 3 – 4 位标识 API 接口的二级类目,第 5 – 7 位表示具体的错误类型。
例如: errno 错误码为 1504003 时,15 表示 API 接口的一级类目为 设备,04 表示 API 接口的二级类目为 NFC,003 表示具体的错误类型。
目前已接入 errno 的 API 接口涉及的类目包括:
- 一级类目:
00– 通用错误码 - 一级类目:
01– 基础- 二级类目:
00– 通用基础错误 - 二级类目:
03– 更新 - 二级类目:
09– 加密
- 二级类目:
- 一级类目:
06– 网络- 二级类目:
00– 通用网络错误 - 二级类目:
02– 发起请求 - 二级类目:
03– 下载 - 二级类目:
04– 上传 - 二级类目:
06– mDNS
- 二级类目:
- 一级类目:
07– 支付- 二级类目:
00– 通用支付错误 - 二级类目:
01– 支付默认二级类目
- 二级类目:
- 一级类目:
11– 媒体- 二级类目:
07– 实时音视频
- 二级类目:
- 一级类目:
13– 文件- 二级类目:
00– 通用文件错误 - 二级类目:
01– 文件默认二级类目 - 二级类目:
02– fd接口
- 二级类目:
- 一级类目:
14– 开放接口- 二级类目:
16– 视频号
- 二级类目:
- 一级类目:
15– 设备- 二级类目:
00– 通用设备错误 - 二级类目:
04– NFC - 二级类目:
05– Wi-Fi - 二级类目:
09– 低功耗蓝牙 - 二级类目:
10– 蓝牙
- 二级类目:
- 一级类目:
20– AI- 二级类目:
02– 人脸识别 - 二级类目:
03– vision kit - 二级类目:
04– 机器学习
- 二级类目: