HarmonyOS实战开发:ArkTS编程Node-API接口处理异常错误

简介

使用Node-API接口进行错误处理开发,使得在Node-API模块中能够更好地管理和响应错误情况。通过合理使用这些函数,可以提高模块的稳定性和可靠性。

基本概念

在ArkTS编程中,异常和错误是常见的概念。异常表示发生了某种意外情况,而错误则指示程序无法正确执行某些操作。Node-API提供了一系列方法来帮助开发者在Node-API模块中处理ArkTS中的异常和错误。下面是一些基本概念:

  • 异常(Exception):在程序执行过程中可能会出现的意外情况,可以是语法错误、运行时错误或逻辑错误,例如除以零或对未定义变量的操作。
  • 错误(Error):表示程序无法顺利执行某些操作,可以是由底层系统、API函数或开发者自定义的。
  • 类型错误(Type Error):表示操作或值的类型不符合预期的情况,通常是由于错误的数据类型导致的。
  • 范围错误(Range Error):表示一个值不在预期的范围内,例如对数组长度之外的索引进行访问。

这些基本概念在异常和错误处理中非常重要,开发者需要通过适当的方法来捕获、处理或向用户报告这些异常和错误,以确保程序的稳定性和正确性。Node-API提供的方法可以帮助开发者在Node-API模块中处理ArkTS中的异常和错误。

场景和功能介绍

以下Node-API接口主要用于与ArkTS交互时处理错误和异常情况。他们的使用场景如下:

接口 描述
napi_create_error、napi_create_type_error、napi_create_range_error 在C/C++中需要创建一个错误对象时,可以使用这些函数。创建的错误对象可以使用napi_throw抛出到ArkTS
napi_throw 当在C/C++中出现了错误或异常情况时,通过使用napi_create_error或napi_get_last_error_info方法创建或获取ArkTS Error对象,使用该方法抛出已有的ArkTS Error对象。
napi_throw_error、napi_throw_type_error、napi_throw_range_error 当在C/C++中出现了错误或异常情况时,可以使用这些函数来抛出ArkTS中的异常。
napi_is_error 检查一个napi_value是否代表一个错误对象时,可以使用这个函数。
napi_get_and_clear_last_exception 当你需要获取最近一次出现的异常,并将异常队列清空时,可以使用这个函数。
napi_is_exception_pending 当你需要判断是否有未处理的异常时,可以使用这个函数。
napi_fatal_error 当遇到严重错误或不可恢复的情况时,可以使用这个函数引发致命错误来立即终止进程。
napi_fatal_exception 抛出一个致命异常并终止进程, 同时产生相应的crash日志。

使用示例

Node-API接口开发流程参考使用Node-API实现跨语言交互开发流程,本文仅对接口对应C++及ArkTS相关代码进行展示。

napi_get_last_error_info

用于获取最后一次发生的错误信息,包括错误码、错误消息以及错误进栈信息,即使存在挂起的ArkTS异常,也可以调用此API。

cpp部分代码

#include "napi/native_api.h"
#include <assert.h>
static napi_value GetLastErrorInfo(napi_env env, napi_callback_info info)
{
    // 获取输入参数(这里以字符串message作为参数传入)
    size_t argc = 1;
    napi_value args[1] = {nullptr};
    napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
    // 将传入的字符串参数以napi_get_value_int32取出,主动制造错误
    int32_t value = 0;
    napi_status status = napi_get_value_int32(env, args[0], &value);
    // 接口使用错误,故返回值不为napi_ok
    assert(status != napi_ok);
    // 调用接口napi_get_last_error_info获取最后一次错误信息
    const napi_extended_error_info *errorInfo;
    napi_get_last_error_info(env, &errorInfo);
    // 取出错误码与接口调用错误后其返回值作比较
    assert(errorInfo->error_code == status);
    // 取出错误消息作为返回值带出去打印
    napi_value result = nullptr;
    napi_create_string_utf8(env, errorInfo->error_message, NAPI_AUTO_LENGTH, &result);
    return result;
}

接口声明

// index.d.ts
export const getLastErrorInfo: (str: string) => string;

ArkTS侧示例代码

import hilog from '@ohos.hilog'
import testNapi from 'libentry.so'
try {
  hilog.info(0x0000, 'testTag', 'Test Node-API napi_get_last_error_info: %{public}s', testNapi.getLastErrorInfo('message'));
} catch (error) {
  hilog.error(0x0000, 'testTag', 'Test Node-API napi_get_last_error_info error: %{public}s', error);
}

napi_create_type_error

创建并获取一个带文本信息的ArkTS TypeError。

cpp部分代码

#include "napi/nat
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值