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 – 机器学习