# Errno错误码
在使用部分小程序 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
- 机器学习
-
二级类目:
一级类目与二级类目名称 和 API 接口文档的类目名称基本保持一致。
# 最佳实践
以 API 接口
openBluetoothAdapter
为例,当蓝牙适配器不可用时,针对
openBluetoothAdapter
接口抛出的异常
Error
对象:
"err":
"errMsg": "openBluetoothAdapter:fail:not available",
"errCode": 10001,
"errno": 1500102
可以通过以下代码进行异常处理:
wx.openBluetoothAdapter({
success (res) {
console.log(res)
fail (err) {
// 微信无法使用蓝牙,可引导用户在系统设置中启用蓝牙
if ( err.errno === 1500102 ) {
wx.showModal({
content: '微信无法使用蓝牙,请到系统设置中启用'