# 错误捕捉

从 USV 0.7 开始, uCode 封装了一套错误模板, 目前可以用在 连接积木块 执行

# 使用 uCode 自定义的错误

我们已经在 SDK 里封装了自定义的错误工具, 你可以直接使用, 如下:

import { ErrorTool } from "@ubtech/ucode-extension-common-sdk";

const myError = ErrorTool.getCustomError({
  errorCode: "Hello MyError",
});

ErrorTool.getCustomError() 会返回一个 UCodeCustomError, 这是一个 uCode 封装的自定义错误

# 错误的类型以及字段

# UCodeCustomError

字段 必填 类型 积木块使用支持 描述
errorCode string 错误的代码, 字符串, 最好是唯一的, 用于区分自定义错误的类型
message string 错误信息, 由于 UCodeCustomError 是继承自 Error 错误类, message 也会赋值给 Error
extraData UCodeErrorType.ExtraData 这是 uCode 特有的额外增加的数据, 用于更多的功能定义

# UCodeErrorType.ExtraData

ExtraData 分为三种类型的错误:

类型 名字 积木块使用支持 描述
MarkdownErrorType Markdown 错误类型 可以使用 Markdown 文档支持更多的类型
ImageErrorType 图片错误类型 图片错误类型
TextErrorType 文字错误类型 文字错误类型

积木块中使用

上面的表格也有标注

目前 积木块中使用, 只支持 文字类型的错误, 并且不支持 errorTitleerrorAction

他们三个都会有共有的错误字段:

# 共有字段

字段 必填 类型 积木块使用支持 描述
errorTitle string 错误标题, 可以用于自定义错误模板的标题
errorAction ErrorAction ErrorAction[] 错误的动作, 该错误动作, 用于做一些错误处理, 例如, 断开重连, 或者返回给插件用于自定义错误处理(例如, wifi 配网等)

# MarkdownErrorType 特有字段

如字面意思, MarkdownErrorType 就是指 Markdown 类型的错误

字段 必填 类型 默认值 描述
type string 'markdown' 定义该错误类型为 markdown
content string Markdown 的内容, 图片可以是在线的 URL 或者 base64 编码的图片

使用案例:

代码如下:

ErrorTool.getCustomError({
  errorCode: "HARDWARE_IMAGE_ERROR",
  message: "Markdown错误模板",
  extraData: {
    type: "markdown",
    errorTitle: "Markdown错误模板",
    content: `# Heading level 1
<img src="https://img-baofun.zhhainiao.com/fs/32054fe01be9b24ecb512144b391181c.jpg" width="360" />

## Heading level 2
### Heading level 3
#### Heading level 4
##### Heading level 5
###### Heading level 6

Heading level 1
===============

Heading level 2
---------------`,
  },
});

# ImageErrorType 特有字段

如字面意思, ImageErrorType 就是指 带图片 类型的错误

字段 必填 类型 默认值 描述
type string 'image' 定义该错误类型为 image
image string 图片的 URL 地址, 或者是 base64 URI, 最小在 180(宽) 最大在 512(宽) 之间, 高度不限制

案例如下:

代码如下:

ErrorTool.getCustomError({
  errorCode: "HARDWARE_IMAGE_ERROR",
  message: "图片错误模板",
  extraData: {
    type: "image",
    errorTitle: "硬件连接出错",
    image: ImageTip, // 这里放置图片路径, 或者 import
  },
});

# TextErrorType 特有字段

如字面意思, TextErrorType 纯文字错误, 不赋值 type 类型 默认就是 文字类型, message 就是 作为文字

字段 必填 类型 默认值 描述
type string 'text' 定义该错误类型为 文字

和 Markdown, Image 不一样的是

文字错误可以不赋值 type 甚至是 extraData

例如:

getCustomError({
  errorCode: "mini-connection-timeout",
  message: "连接失败,请确认悟空机器人和电脑在同一个网络,且电量大于20%,请将悟空机器人升级至最新版本",
  extraData: {
    errorTitle: "连接超时",
  },
});

# ErrorAction 错误处理

uCode 自定义一套错误处理, 可以用于错误之后做一些后续的动作

ErrorAction 需要和 DeviceConnection 一起使用

ErrorAction 的定义如下:

字段 必填 类型 默认值 描述
id string 需唯一, 用于执行哪个错误方法
type 'cancel', 'confirm' 'confirm' 错误按钮的样式
name string '' 错误按钮显示的文字

下面举一个案例:

下面这个是 uCodeLink 的检查错误处理:

分为两个错误处理, 分别是:

  • 下载
  • 启动

代码如下:

getCustomError({
    errorCode: 'UCODE_LINK_NOT_READY',
    message: Messages.UCODE_LINK_NOT_READY,
    extraData: {
      type: 'image',
      errorTitle: Messages.UCODE_LINK_NOT_READY_TITLE,
      image: UCodeLinkPng,
      errorAction: [
        { // 这是下载的处理
          id: 'download-ucodelink',
          name: Messages.UCODE_LINK_DOWNLOAD_TEXT,
          type: 'cancel',
        },
        { // 这是启动的处理
          id: 'start-ucodelink',
          name: Messages.UCODE_LINK_START_TEXT,
          type: 'confirm',
        },
      ],
    },
  });

那点击之后错误处理, 是怎么执行的?

目前错误处理是和 DeviceConnection 接口配合一起使用的