HarmonyOS 鸿蒙Next中try...catch(e)中的e,什么时候是Error,什么时候是BusinessError呢?

HarmonyOS 鸿蒙Next中try…catch(e)中的e,什么时候是Error,什么时候是BusinessError呢? 经常看到下面的写法

try {
  ...
}
catch (e) {
  let err = e as BusinessError;
  ...
}

try {
  ...
}
catch (e) {
  let err = e as Error;
  ...
}

这两种类型有什么区别,在什么情况时使用Error,什么情况时使用BusinessError?

3 回复

选择建议

  • 优先使用 BusinessError
    当调用 HarmonyOS SDK 提供的 API(如 abilitysensorbluetooth 等模块)时,必须使用 as BusinessError,因为这些 API 返回的错误对象包含特定的 codemessage,需通过 BusinessError 类型解析。
  • 使用 Error 的情况
    仅在处理与 HarmonyOS 无关的纯 JavaScript/TypeScript 代码(例如自定义逻辑、第三方库错误)时,可使用 as Error

1. BusinessError 的使用场景

  • 定义BusinessError 是 HarmonyOS SDK 中定义的标准错误类型(从 '@kit.BasicServicesKit' 导入),通常包含 code(错误码)和 message(错误信息)属性。
  • 适用场景
    • 用于捕获 HarmonyOS API 调用时返回的业务逻辑错误(例如权限不足、资源不存在、网络异常等),例如:
catch (err) {
  let code = (err as BusinessError).code;
  let message = (err as BusinessError).message;
  console.error(`Failed, code: ${code}, message: ${message}`);
}
  • 主要用于异步操作(如 Promise.catch 或回调函数)中返回的标准化错误。

2. Error 的使用场景

  • 定义Error 是 TypeScript/JavaScript 原生的通用错误类型,通常仅包含 message 等基础属性。
  • 适用场景
    • 用于捕获 常规的 JavaScript/TypeScript 运行时错误(如语法错误、类型错误、未定义的变量等)。

更多关于HarmonyOS 鸿蒙Next中try...catch(e)中的e,什么时候是Error,什么时候是BusinessError呢?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next中,try…catch(e)中的e类型取决于抛出的错误来源。系统API或运行时异常通常抛出Error对象,如TypeError或RangeError。应用自定义的业务逻辑错误应使用BusinessError,继承自Error,用于处理特定业务场景的异常。通过instanceof可区分类型:e instanceof BusinessError判断是否为业务错误。

在HarmonyOS Next中,try...catch(e)中的异常类型取决于抛出的错误来源:

  • Error:用于系统或运行时错误,如内存不足、网络异常、API调用失败等。通常由底层框架或系统抛出,包含技术性错误信息(如堆栈跟踪)。

  • BusinessError:用于业务逻辑错误,由应用层自定义抛出,例如参数校验失败、权限拒绝、特定业务规则违反等。它继承自Error,但通常包含业务相关的错误码和描述。

使用场景

  • 当捕获系统或通用异常(如文件读写失败)时,使用Error类型转换。
  • 当处理明确由业务代码抛出的错误(如用户输入验证失败)时,使用BusinessError类型转换。

建议通过检查e的属性(如codemessage)或使用instanceof进行类型判断,以确保正确处理异常。

回到顶部