鴻蒙(HarmonyOS)應(yīng)用開發(fā)之Node-API支持的數(shù)據(jù)類型和接口

Node-API的數(shù)據(jù)類型

napi_status

是一個(gè)枚舉數(shù)據(jù)類型冬骚,表示Node-API接口返回的狀態(tài)信息矾踱。

每當(dāng)調(diào)用一個(gè)Node-API函數(shù)蓬推,都會(huì)返回該值婴渡,表示操作成功與否的相關(guān)信息济炎。

typedef enum {
    napi_ok,
    napi_invalid_arg,
    napi_object_expected,
    napi_string_expected,
    napi_name_expected,
    napi_function_expected,
    napi_number_expected,
    napi_boolean_expected,
    napi_array_expected,
    napi_generic_failure,
    napi_pending_exception,
    napi_cancelled,
    napi_escape_called_twice,
    napi_handle_scope_mismatch,
    napi_callback_scope_mismatch,
    napi_queue_full,
    napi_closing,
    napi_bigint_expected,
    napi_date_expected,
    napi_arraybuffer_expected,
    napi_detachable_arraybuffer_expected,
    napi_would_deadlock, /* unused */
    napi_no_external_buffers_allowed,
    napi_cannot_run_js
} napi_status;

napi_extended_error_info

一個(gè)結(jié)構(gòu)體川抡,在調(diào)用函數(shù)不成功時(shí)存儲(chǔ)了較為詳細(xì)的錯(cuò)誤信息。

typedef struct {
    const char *error_message;
    void *engine_reserved;
    uint32_t engine_error_code;
    napi_status error_code;
} napi_extended_error_info;

napi_value

在C++代碼中,表示一個(gè)JavaScript值崖堤。

napi_env

  • 用于表示Node-API執(zhí)行時(shí)的上下文侍咱,Native側(cè)函數(shù)入?yún)ⅲ鬟f給函數(shù)中的Node-API接口密幔。

  • 退出Native側(cè)插件時(shí)楔脯,napi_env將失效,該事件通過回調(diào)傳遞給napi_add_env_cleanup_hook和napi_set_instance_data胯甩。

  • 禁止緩存napi_env昧廷,禁止在不同Worker中傳遞napi_env。

napi_threadsafe_function

napi_threadsafe_function用來創(chuàng)建一個(gè)線程安全的JavaScript函數(shù)偎箫,可以在不同的線程中調(diào)用木柬。可以用于將異步操作的結(jié)果傳遞給JavaScript環(huán)境淹办,例如從另一個(gè)線程中讀取數(shù)據(jù)或執(zhí)行計(jì)算密集型操作眉枕。此外,它還可以用于從JavaScript環(huán)境中調(diào)用C++代碼中的函數(shù)娇唯,以便在另一個(gè)線程中執(zhí)行。通過使用napi_threadsafe_function寂玲,可以實(shí)現(xiàn)JavaScript和C++之間的高效通信塔插,同時(shí)保持線程安全性。

napi_threadsafe_function_release_mode

該枚舉類型定義了兩個(gè)常量拓哟,用于指定在何時(shí)釋放線程安全函數(shù)的回調(diào)函數(shù)想许。

typedef enum {
  napi_tsfn_release,
  napi_tsfn_abort
} napi_threadsafe_function_release_mode;

該值會(huì)傳給napi_release_threadsafe_function。

napi_release_threadsafe_function(napi_threadsafe_function func,
                                 napi_threadsafe_function_release_mode mode);
  • mode值為napi_tsfn_release時(shí):表示當(dāng)前線程不再調(diào)用此tsfn断序。

  • mode值為napi_tsfn_abort時(shí):表示除了當(dāng)前線程流纹,其他線程不能再調(diào)用此tsfn。 如果設(shè)置為napi_tsfn_abort违诗,利用napi_call_threadsafe_function接口調(diào)用此tsfn時(shí)將返回napi_closing漱凝,tsfn函數(shù)并不會(huì)被放入queue中。

napi_threadsafe_function_call_mode

該枚舉類型定義了兩個(gè)常量诸迟,用于指定線程安全函數(shù)的調(diào)用模式茸炒。

數(shù)據(jù)結(jié)構(gòu)如下所示:

typedef enum {
  napi_tsfn_nonblocking,
  napi_tsfn_blocking
} napi_threadsafe_function_call_mode;
  • napi_tsfn_nonblocking:napi_call_threadsafe_function是非阻塞的,如果隊(duì)列已滿阵苇,則返回napi_queue_full壁公,從而阻止數(shù)據(jù)添加到隊(duì)列中。

  • napi_tsfn_blocking:napi_call_threadsafe_function是阻塞的绅项,直至隊(duì)列中有空間可用紊册。

內(nèi)存管理類型

Node-API包含以下內(nèi)存管理類型:

napi_handle_scope

napi_handle_scope數(shù)據(jù)類型是用來管理JavaScript對象的生命周期的。它允許JavaScript對象在一定范圍內(nèi)保持活動(dòng)狀態(tài)快耿,以便在JavaScript代碼中使用囊陡。在創(chuàng)建napi_handle_scope時(shí)芳绩,所有在該范圍內(nèi)創(chuàng)建的JavaScript對象都會(huì)保持活動(dòng)狀態(tài),直到結(jié)束关斜。這樣可以避免在JavaScript代碼中使用已經(jīng)被釋放的對象示括,從而提高代碼的可靠性和性能。

napi_escapable_handle_scope

  • 由napi_open_escapable_handle_scope接口創(chuàng)建痢畜,由napi_close_escapable_handle_scope接口關(guān)閉垛膝。

  • 表示一種特殊類型的句柄范圍,用于將在escapable_handle_scope范圍內(nèi)創(chuàng)建的值返回給父scope丁稀。

  • 用于napi_escape_handle接口吼拥,將escape_handle_scope提升到JS對象,以便在外部作用域使用线衫。

napi_ref

指向napi_value凿可,允許用戶管理JavaScript值的生命周期。

napi_type_tag

該結(jié)構(gòu)體定義了一個(gè)包含兩個(gè)無符號(hào)64位整數(shù)的類型標(biāo)簽授账,用于標(biāo)識(shí)一個(gè)Node-API值的類型信息枯跑。

typedef struct {
  uint64_t lower;
  uint64_t upper;
} napi_type_tag;
  • 存儲(chǔ)了兩個(gè)無符號(hào)64位整數(shù)的128位值,用它來標(biāo)記JavaScript對象白热,確保它們屬于某種類型敛助。

  • 比napi_instanceof更強(qiáng)的類型檢查,如果對象的原型被操縱屋确,napi_instanceof可能會(huì)報(bào)告誤報(bào)纳击。

  • type_tag與napi_wrap結(jié)合非常有用,因?yàn)樗_保從包裝對象檢索的指針可以安全地轉(zhuǎn)換為與先前應(yīng)用于JavaScript對象的類型標(biāo)記相對應(yīng)的Native類型攻臀。

napi_async_cleanup_hook_handle

napi_async_cleanup_hook_handle用于注冊異步操作的回調(diào)函數(shù)焕数。它主要用于在異步操作完成或被取消時(shí)執(zhí)行清理操作,例如釋放資源或撤銷操作刨啸。使用napi_async_cleanup_hook_handle可以確保在異步操作完成或被取消時(shí)堡赔,相關(guān)資源得到正確的釋放和清理,從而避免內(nèi)存泄漏等問題设联。

回調(diào)類型

Node-API包含以下回調(diào)類型:

napi_callback_info

Native側(cè)獲取JS側(cè)參數(shù)信息加匈,傳遞給napi_get_cb_info,用于獲取JS側(cè)入?yún)⑿畔ⅰ?/p>

napi_callback

表示用戶定義的Native函數(shù)仑荐,暴露給JavaScript雕拼,即JS側(cè)調(diào)用的接口;一般不在此callback中創(chuàng)建handle或者callback scope粘招。

基本用法如下:

typedef napi_value (*napi_callback)(napi_env, napi_callback_info);

napi_finalize

函數(shù)指針啥寇,用于傳入napi_create_threadsafe_function和napi_set_instance_data接口。napi_finalize在對象被回收時(shí)會(huì)被調(diào)用。

napi_async_execute_callback

函數(shù)指針辑甜,用于napi_create_async_work接口衰絮。

  • 異步執(zhí)行的Native函數(shù),從工作池線程調(diào)用磷醋,可與主事件循環(huán)線程并行執(zhí)行猫牡。

  • 函數(shù)實(shí)現(xiàn)中必須避免執(zhí)行JavaScript或與JavaScript對象交互的Node-API調(diào)用。

  • Node-API調(diào)用可以在napi_async_complete_callback中執(zhí)行邓线。

napi_async_complete_callback

napi_async_complete_callback用于異步操作完成后的回調(diào)淌友。當(dāng)需要進(jìn)行異步操作時(shí),可以使用napi_create_async_work函數(shù)創(chuàng)建一個(gè)異步操作任務(wù)骇陈,并指定一個(gè)napi_async_complete_callback回調(diào)函數(shù)震庭,在異步操作完成后會(huì)自動(dòng)調(diào)用該回調(diào)函數(shù),以便進(jìn)行后續(xù)的處理你雌。該回調(diào)函數(shù)的參數(shù)包括當(dāng)前異步操作任務(wù)的狀態(tài)和返回值等信息器联,可以根據(jù)這些信息進(jìn)行相應(yīng)的處理。

napi_threadsafe_function_call_js

函數(shù)指針婿崭,在主線程中與獨(dú)立線程中的JavaScript代碼進(jìn)行交互拨拓,從而實(shí)現(xiàn)更加復(fù)雜的功能,用于napi_create_threadsafe_function(napi_env env,…,napi_threadsafe_function_call_js call_js_cb,...)接口氓栈。

napi_cleanup_hook

函數(shù)指針渣磷,用于napi_add_env_cleanup_hook接口,當(dāng)環(huán)境銷毀時(shí)會(huì)被執(zhí)行颤绕。

napi_async_cleanup_hook

函數(shù)指針幸海,用于napi_add_async_cleanup_hook接口祟身,當(dāng)環(huán)境銷毀時(shí)會(huì)被執(zhí)行奥务。

調(diào)度優(yōu)先級

QoS決定了線程調(diào)度的優(yōu)先級,等級定義如下:

typedef enum {
  napi_qos_background = 0,
  napi_qos_utility = 1,
  napi_qos_default = 2,
  napi_qos_user_initiated = 3,
} napi_qos_t;
QoS等級 適用場景
napi_qos_background 低等級袜硫,用戶不可見任務(wù)氯葬,例如數(shù)據(jù)同步、備份婉陷。
napi_qos_utility 中低等級帚称,不需要立即看到響應(yīng)效果的任務(wù),例如下載或?qū)霐?shù)據(jù)秽澳。
napi_qos_default 默認(rèn)
napi_qos_user_initiated 高等級闯睹,用戶觸發(fā)并且可見進(jìn)展,例如打開文檔担神。

事件循環(huán)模式

napi提供了運(yùn)行底層事件循環(huán)的兩種模式, 其定義如下:

typedef enum {
    napi_event_mode_default = 0,
    napi_event_mode_nowait = 1,
} napi_event_mode;
事件循環(huán)運(yùn)行模式 解釋說明
napi_event_mode_default 阻塞式的運(yùn)行底層事件循環(huán)楼吃,直到循環(huán)中沒有任何任務(wù)時(shí)退出事件循環(huán)。
napi_event_mode_nowait 非阻塞式的運(yùn)行底層事件循環(huán),嘗試去處理一個(gè)任務(wù)孩锡,處理完之后退出事件循環(huán)酷宵;如果事件循環(huán)中沒有任務(wù),立刻退出事件循環(huán)躬窜。

支持的Node-API接口

Node-API接口在Node.js提供的原生模塊基礎(chǔ)上擴(kuò)展浇垦,目前支持部分接口,具體可見下文荣挨。

異步安全線程相關(guān)

接口 功能說明
napi_create_threadsafe_function 創(chuàng)建線程安全函數(shù)男韧。
napi_get_threadsafe_function_context 獲取線程安全函數(shù)中的context。
napi_call_threadsafe_function 調(diào)用線程安全函數(shù)垦沉。
napi_acquire_threadsafe_function 指示線程安全函數(shù)可以開始使用煌抒。
napi_release_threadsafe_function 指示線程安全函數(shù)將停止使用。
napi_ref_threadsafe_function 指示在主線程上運(yùn)行的事件循環(huán)在線程安全函數(shù)被銷毀之前不應(yīng)退出厕倍。
napi_unref_threadsafe_function 指示在主線程上運(yùn)行的事件循環(huán)可能會(huì)在線程安全函數(shù)被銷毀之前退出寡壮。

buffer相關(guān)

接口 功能說明
napi_create_buffer 創(chuàng)建并獲取一個(gè)指定大小的JS Buffer。
napi_create_buffer_copy 創(chuàng)建并獲取一個(gè)指定大小的JS Buffer讹弯,并以給定數(shù)據(jù)進(jìn)行初始化况既。
napi_create_external_buffer 創(chuàng)建并獲取一個(gè)指定大小的JS Buffer,并以給定數(shù)據(jù)進(jìn)行初始化组民,該接口可為Buffer附帶額外數(shù)據(jù)棒仍。
napi_get_buffer_info 獲取JS Buffer底層data及其長度。
napi_is_buffer 判斷給定JS value是否為Buffer對象臭胜。
napi_create_external_arraybuffer 分配一個(gè)附加有外部數(shù)據(jù)的JS ArrayBuffer莫其。

string相關(guān)

接口 功能說明
napi_create_string_utf16 通過UTF16編碼的C字符串?dāng)?shù)據(jù)創(chuàng)建JS String。
napi_get_value_string_utf16 獲取給定JS vaule對應(yīng)的UTF16編碼的字符串耸三。
napi_create_string_latin1 通過ISO-8859-1編碼的C字符串?dāng)?shù)據(jù)創(chuàng)建JS String乱陡。
napi_create_string_utf8 通過UTF8編碼的C字符串?dāng)?shù)據(jù)創(chuàng)建JS String。
napi_get_value_string_latin1 獲取給定JS vaule對應(yīng)的ISO-8859-1編碼的字符串仪壮。
napi_get_value_string_utf8 獲取給定JS vaule對應(yīng)的UTF8編碼的字符串憨颠。

date相關(guān)

接口 功能說明
napi_create_date 通過一個(gè)C的double數(shù)據(jù)創(chuàng)建JS Date。
napi_get_date_value 獲取給定JS Date對應(yīng)的C double值积锅。
napi_is_date 判斷給定JS value是否為JS Date對象爽彤。

arraybuffer相關(guān)

接口 功能說明
napi_get_arraybuffer_info 獲取ArrayBuffer的底層data buffer及其長度。
napi_is_arraybuffer 判斷給定JS value是否為ArrayBuffer缚陷。
napi_detach_arraybuffer 分離給定ArrayBuffer的底層數(shù)據(jù)适篙。
napi_is_detached_arraybuffer 判斷給定的ArrayBuffer是否已被分離。
napi_create_arraybuffer 創(chuàng)建并獲取一個(gè)指定大小的JS ArrayBuffer箫爷。

module相關(guān)

接口 功能說明
napi_module_register native模塊注冊接口嚷节。

生命周期相關(guān)

接口 功能說明
napi_open_handle_scope 創(chuàng)建一個(gè)上下文環(huán)境使用铆铆。需要使用napi_close_handle_scope進(jìn)行關(guān)閉。
napi_close_handle_scope 關(guān)閉傳入的上下文環(huán)境丹喻,關(guān)閉后薄货,全部在其中聲明的引用都將被關(guān)閉。
napi_open_escapable_handle_scope 創(chuàng)建出一個(gè)可逃逸的handel scope碍论,可將范圍內(nèi)聲明的值返回到父作用域谅猾。需要使用napi_close_escapable_handle_scope進(jìn)行關(guān)閉。
napi_close_escapable_handle_scope 關(guān)閉傳入的可逃逸的handel scope鳍悠。
napi_escape_handle 提升傳入的JS Object的生命周期到其父作用域税娜。
napi_create_reference 為Object創(chuàng)建一個(gè)reference,以延長其生命周期藏研。調(diào)用者需要自己管理reference生命周期敬矩。
napi_delete_reference 刪除傳入的reference。
napi_reference_ref 增加傳入的reference的引用計(jì)數(shù)蠢挡,并獲取新的計(jì)數(shù)弧岳。
napi_reference_unref 減少傳入的reference的引用計(jì)數(shù),并獲取新的計(jì)數(shù)业踏。
napi_get_reference_value 獲取與reference相關(guān)聯(lián)的JS Object禽炬。
napi_add_finalizer 當(dāng)js Object中的對象被垃圾回收時(shí)調(diào)用注冊的napi_finalize回調(diào)。

promise相關(guān)

接口 功能說明
napi_create_promise 創(chuàng)建一個(gè)promise對象勤家。
napi_resolve_deferred 對promise關(guān)聯(lián)的deferred對象進(jìn)行resolve腹尖。
napi_reject_deferred 對promise關(guān)聯(lián)的deferred對象進(jìn)行reject。
napi_is_promise 判斷給定napi_value是否為promise對象伐脖。

array相關(guān)

接口 功能說明
napi_create_array 創(chuàng)建并獲取一個(gè)JS Array热幔。
napi_create_array_with_length 創(chuàng)建并獲取一個(gè)指定長度的JS Array。
napi_create_typedarray 通過現(xiàn)有的ArrayBuffer創(chuàng)建一個(gè)JS TypeArray讼庇。
napi_create_dataview 通過現(xiàn)有的ArrayBuffer創(chuàng)建一個(gè)JS DataView绎巨。
napi_get_array_length 獲取array的length。
napi_get_typedarray_info 獲取給定TypedArray的各種屬性巫俺。
napi_get_dataview_info 獲取給定DataView的各種屬性认烁。
napi_is_array 判斷給定JS value是否為array肿男。
napi_set_element 在給定Object的指定索引處介汹,設(shè)置元素。
napi_get_element 獲取給定Object指定索引處的元素舶沛。
napi_has_element 若給定Object的指定索引處擁有屬性嘹承,獲取該元素。
napi_delete_element 嘗試刪除給定Object的指定索引處的元素如庭。

primitive相關(guān)

接口 功能說明
napi_get_boolean 根據(jù)給定的C boolean值叹卷,獲取JS Boolean對象撼港。
napi_get_global 獲取global對象。
napi_get_null 獲取null對象骤竹。
napi_get_undefined 獲取undefined對象帝牡。
napi_coerce_to_bool 將給定的JS value強(qiáng)轉(zhuǎn)成JS Boolean。
napi_coerce_to_number 將給定的JS value強(qiáng)轉(zhuǎn)成JS Number蒙揣。
napi_coerce_to_object 將給定的JS value強(qiáng)轉(zhuǎn)成JS Object靶溜。
napi_coerce_to_string 將給定的JS value強(qiáng)轉(zhuǎn)成JS String。

class相關(guān)

接口 功能說明
napi_get_new_target 獲取構(gòu)造函數(shù)調(diào)用的new.target懒震。
napi_define_class 定義與C++類相對應(yīng)的JavaScript類罩息。
napi_new_instance 通過給定的構(gòu)造函數(shù),構(gòu)建一個(gè)實(shí)例个扰。

object相關(guān)

接口 功能說明
napi_get_prototype 獲取給定JS Object的prototype瓷炮。
napi_create_object 創(chuàng)建一個(gè)默認(rèn)的JS Object。
napi_object_freeze 凍結(jié)給定的對象递宅。
napi_object_seal 密封給定的對象娘香。
napi_typeof 獲取給定JS value的JS Type。
napi_instanceof 判斷給定object是否為給定constructor的實(shí)例办龄。
napi_type_tag_object 將tag指針的值與Object關(guān)聯(lián)茅主。
napi_check_object_type_tag 判斷給定的tag指針是否被關(guān)聯(lián)到了JS Object上。

bigint相關(guān)

接口 功能說明
napi_create_bigint_int64 通過一個(gè)C的int64數(shù)據(jù)創(chuàng)建JS BigInt土榴。
napi_create_bigint_uint64 通過一個(gè)C的uint64數(shù)據(jù)創(chuàng)建JS BigInt诀姚。
napi_create_bigint_words 通過一個(gè)C的uint64數(shù)組創(chuàng)建單個(gè)JS BigInt。
napi_get_value_bigint_int64 獲取給定JS BigInt對應(yīng)的C int64值玷禽。
napi_get_value_bigint_uint64 獲取給定JS BigInt對應(yīng)的C uint64值赫段。
napi_get_value_bigint_words 獲取給定JS BigInt對應(yīng)的信息,包括符號(hào)位矢赁、64位小端序數(shù)組和數(shù)組中的元素個(gè)數(shù)糯笙。

異常和錯(cuò)誤相關(guān)

接口 功能說明
napi_throw 拋出一個(gè)JS value。
napi_throw_type_error 拋出一個(gè)帶文本信息的JS TypeError撩银。
napi_throw_range_error 拋出一個(gè)帶文本信息的JS RangeError给涕。
napi_is_error 判斷napi_value是否表示為一個(gè)error對象。
napi_create_error 創(chuàng)建并獲取一個(gè)帶文本信息的JS Error额获。
napi_create_type_error 創(chuàng)建并獲取一個(gè)帶文本信息的JS TypeError够庙。
napi_create_range_error 創(chuàng)建并獲取一個(gè)帶文本信息的JS RangeError。
napi_get_and_clear_last_exception 獲取并清除最近一次出現(xiàn)的異常抄邀。
napi_is_exception_pending 判斷是否出現(xiàn)了異常耘眨。
napi_fatal_error 引發(fā)致命錯(cuò)誤以立即終止進(jìn)程。
napi_get_last_error_info 獲取napi_extended_error_info結(jié)構(gòu)體境肾,其中包含最近一次出現(xiàn)的error信息剔难。

屬性相關(guān)

接口 功能說明
napi_get_property_names 以字符串?dāng)?shù)組的形式獲取對象的可枚舉屬性的名稱胆屿。
napi_set_property 對給定Object設(shè)置屬性徐伐。
napi_get_property 獲取給定Object的給定屬性潘拨。
napi_has_property 判斷給定對象中是否存在給定屬性。
napi_delete_property 嘗試從給定Object中刪除給定key屬性喝检。
napi_has_own_property 判斷給定Object中是否有名為key的own property纯趋。
napi_set_named_property 對給定Object設(shè)置一個(gè)給定名稱的屬性彻秆。
napi_get_named_property 獲取給定Object中指定名稱的屬性。
napi_has_named_property 判斷給定Object中是否有給定名稱的屬性结闸。
napi_define_properties 批量的向給定Object中定義屬性唇兑。
napi_get_all_property_names 獲取一個(gè)數(shù)組,其中包含此對象過濾后的屬性名稱桦锄。

異步任務(wù)相關(guān)

接口 功能說明
napi_create_async_work 創(chuàng)建一個(gè)異步工作對象扎附。
napi_delete_async_work 釋放先前創(chuàng)建的異步工作對象。
napi_queue_async_work 將異步工作對象加到隊(duì)列结耀,由底層去調(diào)度執(zhí)行留夜。
napi_cancel_async_work 取消入隊(duì)的異步任務(wù)。

自定義異步操作

接口 功能說明
napi_async_init 創(chuàng)建一個(gè)異步資源上下文環(huán)境(暫不支持與async_hook相關(guān)能力)图甜。
napi_make_callback 在異步資源上下文環(huán)境中回調(diào)JS函數(shù)(暫不支持與async_hook相關(guān)能力)碍粥。
napi_async_destroy 銷毀先前創(chuàng)建的異步資源上下文環(huán)境(暫不支持與async_hook相關(guān)能力)。
napi_open_callback_scope 創(chuàng)建一個(gè)回調(diào)作用域(暫不支持與async_hook相關(guān)能力)黑毅。
napi_close_callback_scope 關(guān)閉先前創(chuàng)建的回調(diào)作用域(暫不支持與async_hook相關(guān)能力)嚼摩。

判斷給定的兩個(gè)JS value是否嚴(yán)格相等

接口 功能說明
napi_strict_equals 判斷給定的兩個(gè)JS value是否嚴(yán)格相等。

uv相關(guān)

接口 功能說明
napi_get_uv_event_loop 獲取當(dāng)前l(fā)ibuv loop實(shí)例矿瘦。

函數(shù)調(diào)用

接口 功能說明
napi_call_function 在C/C++側(cè)調(diào)用JS方法枕面。
napi_get_cb_info 從給定的callback info中獲取有關(guān)調(diào)用的詳細(xì)信息,如參數(shù)和this指針缚去。

擴(kuò)展能力

接口 功能說明
napi_queue_async_work_with_qos 將異步工作對象加到隊(duì)列潮秘,由底層根據(jù)傳入的qos優(yōu)先級去調(diào)度執(zhí)行。
napi_run_script_path 運(yùn)行指定abc文件易结。
napi_load_module 將abc文件作為模塊加載枕荞,返回模塊的命名空間。
napi_create_object_with_properties 使用給定的napi_property_descriptor創(chuàng)建js Object搞动。descriptor的鍵名必須為 string躏精,且不可轉(zhuǎn)為number。
napi_create_object_with_named_properties 使用給定的napi_value和鍵名創(chuàng)建js Object滋尉。鍵名必須為 string玉控,且不可轉(zhuǎn)為number飞主。
napi_coerce_to_native_binding_object 強(qiáng)制將js Object和Native對象綁定狮惜。
napi_run_event_loop 觸發(fā)底層的事件循環(huán)高诺。
napi_stop_event_loop 停止底層的事件循環(huán)。

napi_queue_async_work_with_qos

napi_status napi_run_script_path(napi_env env,
                                 const char* abcPath,
                                 napi_value* result);

用法同napi_queue_async_work碾篡,但可以指定QoS等級虱而。

napi_run_script_path

napi_status napi_run_script_path(napi_env env,
                                 const char* abcPath,
                                 napi_value* result);

napi_load_module

napi_status napi_load_module(napi_env env,
                             const char* path,
                             napi_value* result);

napi_create_object_with_properties

napi_status napi_create_object_with_properties(napi_env env,
                                               napi_value* result,
                                               size_t property_count,
                                               const napi_property_descriptor* properties);

napi_create_object_with_named_properties

napi_status napi_create_object_with_named_properties(napi_env env,
                                                     napi_value* result,
                                                     size_t property_count,
                                                     const char** keys,
                                                     const napi_value* values);

napi_coerce_to_native_binding_object

napi_status napi_coerce_to_native_binding_object(napi_env env,
                                                 napi_value js_object,
                                                 napi_native_binding_detach_callback detach_cb,
                                                 napi_native_binding_attach_callback attach_cb,
                                                 void* native_object,
                                                 void* hint);  

napi_run_event_loop

napi_status napi_run_event_loop(napi_env env, napi_event_mode mode);

napi_stop_event_loop

napi_status napi_stop_event_loop(napi_env env);

環(huán)境生命周期

接口 功能說明
napi_set_instance_data 綁定與當(dāng)前運(yùn)行的環(huán)境相關(guān)聯(lián)的數(shù)據(jù)項(xiàng)。
napi_get_instance_data 檢索與當(dāng)前運(yùn)行的環(huán)境相關(guān)聯(lián)的數(shù)據(jù)項(xiàng)开泽。

對象生命周期管理

接口 功能說明
napi_add_env_cleanup_hook 注冊環(huán)境清理鉤子函數(shù)牡拇。
napi_remove_env_cleanup_hook 取消環(huán)境清理鉤子函數(shù)。
napi_add_async_cleanup_hook 注冊清理異步鉤子函數(shù)穆律。
napi_remove_async_cleanup_hook 取消清理異步鉤子函數(shù)惠呼。

ArkTs基礎(chǔ)運(yùn)行時(shí)環(huán)境

接口 功能說明
napi_create_ark_runtime 創(chuàng)建基礎(chǔ)運(yùn)行時(shí)環(huán)境
napi_destroy_ark_runtime 銷毀基礎(chǔ)運(yùn)行時(shí)環(huán)境

其他實(shí)用工具

接口 功能說明
node_api_get_module_file_name 用于獲取加載項(xiàng)加載位置的絕對路徑。

寫在最后

  • 如果你覺得這篇內(nèi)容對你還蠻有幫助峦耘,我想邀請你幫我三個(gè)小忙:
  • 點(diǎn)贊剔蹋,轉(zhuǎn)發(fā),有你們的 『點(diǎn)贊和評論』辅髓,才是我創(chuàng)造的動(dòng)力泣崩。
  • 關(guān)注小編,同時(shí)可以期待后續(xù)文章ing??洛口,不定期分享原創(chuàng)知識(shí)矫付。
  • 想要獲取更多完整鴻蒙最新學(xué)習(xí)知識(shí)點(diǎn),請移步前往小編:https://gitee.com/MNxiaona/733GH/blob/master/jianshu
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末第焰,一起剝皮案震驚了整個(gè)濱河市买优,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌挺举,老刑警劉巖而叼,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異豹悬,居然都是意外死亡葵陵,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進(jìn)店門瞻佛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來脱篙,“玉大人,你說我怎么就攤上這事伤柄“砝В” “怎么了?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵适刀,是天一觀的道長秤朗。 經(jīng)常有香客問我,道長笔喉,這世上最難降的妖魔是什么取视? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任硝皂,我火速辦了婚禮,結(jié)果婚禮上作谭,老公的妹妹穿的比我還像新娘稽物。我一直安慰自己,他們只是感情好折欠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布贝或。 她就那樣靜靜地躺著,像睡著了一般锐秦。 火紅的嫁衣襯著肌膚如雪咪奖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天酱床,我揣著相機(jī)與錄音赡艰,去河邊找鬼。 笑死斤葱,一個(gè)胖子當(dāng)著我的面吹牛慷垮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播揍堕,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼料身,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了衩茸?” 一聲冷哼從身側(cè)響起芹血,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎楞慈,沒想到半個(gè)月后幔烛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡囊蓝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年饿悬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片聚霜。...
    茶點(diǎn)故事閱讀 39,764評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡狡恬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蝎宇,到底是詐尸還是另有隱情弟劲,我是刑警寧澤,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布姥芥,位于F島的核電站兔乞,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜庸追,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一霍骄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧锚国,春花似錦腕巡、人聲如沸玄坦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽煎楣。三九已至豺总,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間择懂,已是汗流浹背喻喳。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留困曙,地道東北人表伦。 一個(gè)月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像慷丽,于是被迫代替她去往敵國和親蹦哼。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評論 2 354