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?
选择建议
- 优先使用
BusinessError
:
当调用 HarmonyOS SDK 提供的 API(如ability
、sensor
、bluetooth
等模块)时,必须使用as BusinessError
,因为这些 API 返回的错误对象包含特定的code
和message
,需通过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
的属性(如code
或message
)或使用instanceof
进行类型判断,以确保正确处理异常。