★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤部落格園地址:為敢技術(https://www.cnblogs.com/strengthen/ )
➤GitHub地址:https://github.com/strengthen
➤原文地址:https://www.cnblogs.com/strengthen/p/18502733
➤如果連結不是為敢技術的部落格園地址,則可能是爬取作者的文章。
➤原文已修改更新!強烈建議點選原文地址閱讀!支援作者!支援原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
Node-API的資料型別
napi_status
是一個列舉資料型別,表示Node-API介面返回的狀態資訊。
每當呼叫一個Node-API函式,都會返回該值,表示操作成功與否的相關資訊。
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
一個結構體,在呼叫函式不成功時儲存了較為詳細的錯誤資訊。
- typedef struct {
- const char *error_message;
- void *engine_reserved;
- uint32_t engine_error_code;
- napi_status error_code;
- } napi_extended_error_info;
napi_value
napi_value是一個C的結構體指標,表示一個JavaScript物件的引用。napi_value持有了JS物件,同時,napi_value受handle_scope管理,scope中napi_value持有的JS物件不會被釋放;出scope後,napi_value將失效,不再持有對應的JS物件。
napi_env
-
用於表示Node-API執行時的上下文,Native側函式入參,並傳遞給函式中的Node-API介面。
-
napi_env與JS執行緒繫結,JS執行緒退出後,napi_env將失效。
-
禁止快取napi_env,禁止在不同Worker中傳遞napi_env。
napi_threadsafe_function
napi_threadsafe_function用來建立一個執行緒安全的JavaScript函式,可以在不同的執行緒中呼叫。可以用於將非同步操作的結果傳遞給JavaScript環境,例如從另一個執行緒中讀取資料或執行計算密集型操作。此外,它還可以用於從JavaScript環境中呼叫C++程式碼中的函式,以便在另一個執行緒中執行。透過使用napi_threadsafe_function,可以實現JavaScript和C++之間的高效通訊,同時保持執行緒安全性。
napi_threadsafe_function_release_mode
該列舉型別定義了兩個常量,用於指定在何時釋放執行緒安全函式的回撥函式。
- typedef enum {
- napi_tsfn_release,
- napi_tsfn_abort
- } napi_threadsafe_function_release_mode;
該值會傳給napi_release_threadsafe_function。
- napi_release_threadsafe_function(napi_threadsafe_function func,
- napi_threadsafe_function_release_mode mode);
-
mode值為napi_tsfn_release時:表示當前執行緒不再呼叫此tsfn。
-
mode值為napi_tsfn_abort時:表示除了當前執行緒,其他執行緒不能再呼叫此tsfn。
如果設定為napi_tsfn_abort,利用napi_call_threadsafe_function介面呼叫此tsfn時將返回napi_closing,tsfn函式並不會被放入queue中。
napi_threadsafe_function_call_mode
該列舉型別定義了兩個常量,用於指定執行緒安全函式的呼叫模式。
資料結構如下所示:
- typedef enum {
- napi_tsfn_nonblocking,
- napi_tsfn_blocking
- } napi_threadsafe_function_call_mode;
-
napi_tsfn_nonblocking:napi_call_threadsafe_function是非阻塞的,如果佇列已滿,則返回napi_queue_full,從而阻止資料新增到佇列中。
-
napi_tsfn_blocking:napi_call_threadsafe_function是阻塞的,直至佇列中有空間可用。
記憶體管理型別
Node-API包含以下記憶體管理型別:
napi_handle_scope
napi_handle_scope資料型別是用來管理JavaScript物件的生命週期的。它允許JavaScript物件在一定範圍內保持活動狀態,以便在JavaScript程式碼中使用。在建立napi_handle_scope時,所有在該範圍內建立的JavaScript物件都會保持活動狀態,直到結束。這樣可以避免在JavaScript程式碼中使用已經被釋放的物件,從而提高程式碼的可靠性和效能。
napi_escapable_handle_scope
-
由napi_open_escapable_handle_scope介面建立,由napi_close_escapable_handle_scope介面關閉。
-
表示一種特殊型別的控制代碼範圍,用於將在escapable_handle_scope範圍內建立的值返回給父scope。
-
用於napi_escape_handle介面,將escape_handle_scope提升到JS物件,以便在外部作用域使用。
napi_ref
指向napi_value,允許使用者管理JavaScript值的生命週期。
napi_type_tag
該結構體定義了一個包含兩個無符號64位整數的型別標籤,用於標識一個Node-API值的型別資訊。
- typedef struct {
- uint64_t lower;
- uint64_t upper;
- } napi_type_tag;
-
儲存了兩個無符號64位整數的128位值,用它來標記JavaScript物件,確保它們屬於某種型別。
-
比napi_instanceof更強的型別檢查,如果物件的原型被操縱,napi_instanceof可能會報告誤報。
-
type_tag與napi_wrap結合非常有用,因為它確保從包裝物件檢索的指標可以安全地轉換為與先前應用於JavaScript物件的型別標記相對應的Native型別。
napi_async_cleanup_hook_handle
napi_async_cleanup_hook_handle用於註冊非同步操作的回撥函式。它主要用於在非同步操作完成或被取消時執行清理操作,例如釋放資源或撤銷操作。使用napi_async_cleanup_hook_handle可以確保在非同步操作完成或被取消時,相關資源得到正確的釋放和清理,從而避免記憶體洩漏等問題。
回撥型別
Node-API包含以下回撥型別:
napi_callback_info
Native側獲取JS側引數資訊,傳遞給napi_get_cb_info,用於獲取JS側入參資訊。
napi_callback
表示使用者定義的Native函式,暴露給JavaScript,即JS側呼叫的介面;一般不在此callback中建立handle或者callback scope。
基本用法如下:
- typedef napi_value (*napi_callback)(napi_env, napi_callback_info);
napi_finalize
函式指標,用於傳入napi_create_threadsafe_function和napi_set_instance_data介面。napi_finalize在物件被回收時會被呼叫。
napi_async_execute_callback
函式指標,用於napi_create_async_work介面。
-
非同步執行的Native函式,從工作池執行緒呼叫,可與主事件迴圈執行緒並行執行。
-
函式實現中必須避免執行JavaScript或與JavaScript物件互動的Node-API呼叫。
-
Node-API呼叫可以在napi_async_complete_callback中執行。
napi_async_complete_callback
napi_async_complete_callback用於非同步操作完成後的回撥。當需要進行非同步操作時,可以使用napi_create_async_work函式建立一個非同步操作任務,並指定一個napi_async_complete_callback回撥函式,在非同步操作完成後會自動呼叫該回撥函式,以便進行後續的處理。該回撥函式的引數包括當前非同步操作任務的狀態和返回值等資訊,可以根據這些資訊進行相應的處理。
napi_threadsafe_function_call_js
函式指標,在主執行緒中與獨立執行緒中的JavaScript程式碼進行互動,從而實現更加複雜的功能,用於napi_create_threadsafe_function(napi_env env,…,napi_threadsafe_function_call_js call_js_cb,...)介面。
napi_cleanup_hook
函式指標,用於napi_add_env_cleanup_hook介面,當環境銷燬時會被執行。
napi_async_cleanup_hook
函式指標,用於napi_add_async_cleanup_hook介面,當環境銷燬時會被執行。
排程優先順序
QoS決定了執行緒排程的優先順序,等級定義如下:
- 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 | 低等級,使用者不可見任務,例如資料同步、備份。 |
napi_qos_utility | 中低等級,不需要立即看到響應效果的任務,例如下載或匯入資料。 |
napi_qos_default | 預設。 |
napi_qos_user_initiated | 高等級,使用者觸發並且可見進展,例如開啟文件。 |
事件迴圈模式
napi提供了執行底層事件迴圈的兩種模式, 其定義如下:
- typedef enum {
- napi_event_mode_default = 0,
- napi_event_mode_nowait = 1,
- } napi_event_mode;
事件迴圈執行模式 | 解釋說明 |
---|---|
napi_event_mode_default | 阻塞式的執行底層事件迴圈,直到迴圈中沒有任何任務時退出事件迴圈。 |
napi_event_mode_nowait | 非阻塞式的執行底層事件迴圈,嘗試去處理一個任務,處理完之後退出事件迴圈;如果事件迴圈中沒有任務,立刻退出事件迴圈。 |
執行緒安全任務優先順序
napi提供了執行緒安全任務的優先順序, 底層任務佇列中的任務會根據其優先順序被依次執行, 優先順序的定義如下:
- typedef enum {
- napi_priority_immediate = 0,
- napi_priority_high = 1,
- napi_priority_low = 2,
- napi_priority_idle = 3,
- } napi_task_priority;
任務優先順序 | 解釋說明 |
---|---|
napi_priority_immediate | 該優先順序的級別最高。 |
napi_priority_high | 該優先順序的級別低於napi_priority_immediate。 |
napi_priority_low | 該優先順序的級別低於napi_priority_immediate和napi_priority_high。 |
napi_priority_idle | 該優先順序的級別最低。 |
支援的Node-API介面
Node-API介面在Node.js提供的原生模組基礎上擴充套件,目前支援部分介面,具體可見下文。
非同步安全執行緒相關
介面 | 功能說明 |
---|---|
napi_create_threadsafe_function | 建立執行緒安全函式。 |
napi_get_threadsafe_function_context | 獲取執行緒安全函式中的context。 |
napi_call_threadsafe_function | 呼叫執行緒安全函式。 |
napi_acquire_threadsafe_function | 指示執行緒安全函式可以開始使用。 |
napi_release_threadsafe_function | 指示執行緒安全函式將停止使用。 |
napi_ref_threadsafe_function | 指示在主執行緒上執行的事件迴圈線上程安全函式被銷燬之前不應退出。 |
napi_unref_threadsafe_function | 指示在主執行緒上執行的事件迴圈可能會線上程安全函式被銷燬之前退出。 |
buffer相關
介面 | 功能說明 |
---|---|
napi_create_buffer | 建立並獲取一個指定大小的JS Buffer。 |
napi_create_buffer_copy | 建立並獲取一個指定大小的JS Buffer,並以給定資料進行初始化。 |
napi_create_external_buffer | 建立並獲取一個指定大小的JS Buffer,並以給定資料進行初始化,該介面可為Buffer附帶額外資料。 |
napi_get_buffer_info | 獲取JS Buffer底層data及其長度。 |
napi_is_buffer | 判斷給定JS value是否為Buffer物件。 |
napi_create_external_arraybuffer | 分配一個附加有外部資料的JS ArrayBuffer。 |
string相關
介面 | 功能說明 |
---|---|
napi_create_string_utf16 | 透過UTF16編碼的C字串資料建立JS String。 |
napi_get_value_string_utf16 | 獲取給定JS vaule對應的UTF16編碼的字串。 |
napi_create_string_latin1 | 透過ISO-8859-1編碼的C字串資料建立JS String。 |
napi_create_string_utf8 | 透過UTF8編碼的C字串資料建立JS String。 |
napi_get_value_string_latin1 | 獲取給定JS vaule對應的ISO-8859-1編碼的字串。 |
napi_get_value_string_utf8 | 獲取給定JS vaule對應的UTF8編碼的字串。 |
date相關
介面 | 功能說明 |
---|---|
napi_create_date | 透過一個C的double資料建立JS Date。 |
napi_get_date_value | 獲取給定JS Date對應的C double值。 |
napi_is_date | 判斷給定JS value是否為JS Date物件。 |
arraybuffer相關
介面 | 功能說明 |
---|---|
napi_get_arraybuffer_info | 獲取ArrayBuffer的底層data buffer及其長度。 |
napi_is_arraybuffer | 判斷給定JS value是否為ArrayBuffer。 |
napi_detach_arraybuffer | 分離給定ArrayBuffer的底層資料。 |
napi_is_detached_arraybuffer | 判斷給定的ArrayBuffer是否已被分離。 |
napi_create_arraybuffer | 建立並獲取一個指定大小的JS ArrayBuffer。 |
module相關
介面 | 功能說明 |
---|---|
napi_module_register | native模組註冊介面。 |
生命週期相關
介面 | 功能說明 |
---|---|
napi_open_handle_scope | 建立一個上下文環境使用。需要使用napi_close_handle_scope進行關閉。 |
napi_close_handle_scope | 關閉傳入的上下文環境,關閉後,全部在其中宣告的引用都將被關閉。 |
napi_open_escapable_handle_scope | 建立出一個可逃逸的handle scope,可將範圍內宣告的值返回到父作用域。需要使用napi_close_escapable_handle_scope進行關閉。 |
napi_close_escapable_handle_scope | 關閉傳入的可逃逸的handle scope。 |
napi_escape_handle | 提升傳入的JS Object的生命週期到其父作用域。 |
napi_create_reference | 為Object建立一個reference,以延長其生命週期。呼叫者需要自己管理reference生命週期。 |
napi_delete_reference | 刪除傳入的reference。 |
napi_reference_ref | 增加傳入的reference的引用計數,並獲取新的計數。 |
napi_reference_unref | 減少傳入的reference的引用計數,並獲取新的計數。 |
napi_get_reference_value | 獲取與reference相關聯的JS Object。 |
napi_add_finalizer | 當js Object中的物件被垃圾回收時呼叫註冊的napi_finalize回撥。 |
promise相關
介面 | 功能說明 |
---|---|
napi_create_promise | 建立一個promise物件。 |
napi_resolve_deferred | 對promise關聯的deferred物件進行resolve。 |
napi_reject_deferred | 對promise關聯的deferred物件進行reject。 |
napi_is_promise | 判斷給定napi_value是否為promise物件。 |
array相關
介面 | 功能說明 |
---|---|
napi_create_array | 建立並獲取一個JS Array。 |
napi_create_array_with_length | 建立並獲取一個指定長度的JS Array。 |
napi_get_array_length | 獲取array的length。 |
napi_is_array | 判斷給定JS value是否為array。 |
napi_set_element | 在給定Object的指定索引處,設定元素。 |
napi_get_element | 獲取給定Object指定索引處的元素。 |
napi_has_element | 若給定Object的指定索引處擁有屬性,獲取該元素。 |
napi_delete_element | 嘗試刪除給定Object的指定索引處的元素。 |
napi_create_typedarray | 透過現有的ArrayBuffer建立一個JS TypeArray。 |
napi_is_typedarray | 判斷給定JS value是否為TypeArray。 |
napi_get_typedarray_info | 獲取給定TypedArray的各種屬性。 |
napi_create_dataview | 透過現有的ArrayBuffer建立一個JS DataView。 |
napi_is_dataview | 判斷給定JS value是否為DataView。 |
napi_get_dataview_info | 獲取給定DataView的各種屬性。 |
primitive相關
介面 | 功能說明 |
---|---|
napi_get_boolean | 根據給定的C boolean值,獲取JS Boolean物件。 |
napi_get_global | 獲取global物件。 |
napi_get_null | 獲取null物件。 |
napi_get_undefined | 獲取undefined物件。 |
napi_coerce_to_bool | 將給定的JS value強轉成JS Boolean。 |
napi_coerce_to_number | 將給定的JS value強轉成JS Number。 |
napi_coerce_to_object | 將給定的JS value強轉成JS Object。 |
napi_coerce_to_string | 將給定的JS value強轉成JS String。 |
class相關
介面 | 功能說明 |
---|---|
napi_new_instance | 透過給定的建構函式,構建一個例項。 |
napi_get_new_target | 獲取建構函式呼叫的new.target。 |
napi_define_class | 定義與C++類相對應的JavaScript類。 |
napi_wrap | 在ArkTS物件上繫結一個Node-API模組物件例項。這個函式通常在將Node-API模組物件與ArkTS物件進行繫結時使用,以便在ArkTS中使用本地物件的方法和屬性。 |
napi_unwrap | 從ArkTS物件上獲取之前繫結的Node-API模組物件例項。 |
napi_remove_wrap | 從ArkTS物件上獲取之前繫結的Node-API模組物件例項,並解除繫結。 |
object相關
介面 | 功能說明 |
---|---|
napi_get_prototype | 獲取給定JS Object的prototype。 |
napi_create_object | 建立一個預設的JS Object。 |
napi_object_freeze | 凍結給定的物件。 |
napi_object_seal | 密封給定的物件。 |
napi_typeof | 獲取給定JS value的JS Type。 |
napi_instanceof | 判斷給定object是否為給定constructor的例項。 |
napi_type_tag_object | 將tag指標的值與Object關聯。 |
napi_check_object_type_tag | 判斷給定的tag指標是否被關聯到了JS Object上。 |
bigint相關
介面 | 功能說明 |
---|---|
napi_create_bigint_int64 | 透過一個C的int64資料建立JS BigInt。 |
napi_create_bigint_uint64 | 透過一個C的uint64資料建立JS BigInt。 |
napi_create_bigint_words | 透過一個C的uint64陣列建立單個JS BigInt。 |
napi_get_value_bigint_int64 | 獲取給定JS BigInt對應的C int64值。 |
napi_get_value_bigint_uint64 | 獲取給定JS BigInt對應的C uint64值。 |
napi_get_value_bigint_words | 獲取給定JS BigInt對應的資訊,包括符號位、64位小端序陣列和陣列中的元素個數。 |
異常和錯誤相關
介面 | 功能說明 |
---|---|
napi_throw | 丟擲一個JS value。 |
napi_throw_error | 用於丟擲一個帶文字資訊的ArkTS Error。 |
napi_throw_type_error | 丟擲一個帶文字資訊的JS TypeError。 |
napi_throw_range_error | 丟擲一個帶文字資訊的JS RangeError。 |
napi_is_error | 判斷napi_value是否表示為一個error物件。 |
napi_create_error | 建立並獲取一個帶文字資訊的JS Error。 |
napi_create_type_error | 建立並獲取一個帶文字資訊的JS TypeError。 |
napi_create_range_error | 建立並獲取一個帶文字資訊的JS RangeError。 |
napi_get_and_clear_last_exception | 獲取並清除最近一次出現的異常。 |
napi_is_exception_pending | 判斷是否出現了異常。 |
napi_fatal_error | 引發致命錯誤以立即終止程序。 |
napi_get_last_error_info | 獲取napi_extended_error_info結構體,其中包含最近一次出現的error資訊。 |
napi_fatal_exception | 丟擲一個致命異常並終止程序, 同時產生相應的crash日誌。 |
屬性相關
介面 | 功能說明 |
---|---|
napi_get_property_names | 以字串陣列的形式獲取物件的可列舉屬性的名稱。 |
napi_set_property | 對給定Object設定屬性。 |
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設定一個給定名稱的屬性。 |
napi_get_named_property | 獲取給定Object中指定名稱的屬性。 |
napi_has_named_property | 判斷給定Object中是否有給定名稱的屬性。 |
napi_define_properties | 批次的向給定Object中定義屬性。 |
napi_get_all_property_names | 獲取一個陣列,其中包含此物件過濾後的屬性名稱。 |
非同步任務相關
介面 | 功能說明 |
---|---|
napi_create_async_work | 建立一個非同步工作物件。 |
napi_delete_async_work | 釋放先前建立的非同步工作物件。 |
napi_queue_async_work | 將非同步工作物件加到佇列,由底層去排程執行。 |
napi_cancel_async_work | 取消入隊的非同步任務。 |
自定義非同步操作
介面 | 功能說明 |
---|---|
napi_async_init | 建立一個非同步資源上下文環境(不支援與async_hook相關能力)。 |
napi_make_callback | 在非同步資源上下文環境中回撥JS函式(不支援與async_hook相關能力)。 |
napi_async_destroy | 銷燬先前建立的非同步資源上下文環境(不支援與async_hook相關能力)。 |
napi_open_callback_scope | 建立一個回撥作用域(不支援與async_hook相關能力)。 |
napi_close_callback_scope | 關閉先前建立的回撥作用域(不支援與async_hook相關能力)。 |
判斷給定的兩個JS value是否嚴格相等
介面 | 功能說明 |
---|---|
napi_strict_equals | 判斷給定的兩個JS value是否嚴格相等。 |
uv相關
介面 | 功能說明 |
---|---|
napi_get_uv_event_loop | 獲取當前libuv loop例項。 |
函式呼叫
介面 | 功能說明 |
---|---|
napi_call_function | 在C/C++側呼叫JS方法。 |
napi_get_cb_info | 從給定的callback info中獲取有關呼叫的詳細資訊,如引數和this指標。 |
擴充套件能力
Node-API元件擴充套件的符號列表
介面 | 功能說明 |
---|---|
napi_queue_async_work_with_qos | 將非同步工作物件加到佇列,由底層根據傳入的qos優先順序去排程執行。 |
napi_run_script_path | 執行指定abc檔案。 |
napi_load_module | 將abc檔案作為模組載入,返回模組的名稱空間。 |
napi_load_module_with_info | 將abc檔案作為模組載入,返回模組的名稱空間, 可在新建立的ArkTS基礎執行時環境中使用。 |
napi_create_object_with_properties | 使用給定的napi_property_descriptor建立js Object。descriptor的鍵名必須為 string,且不可轉為number。 |
napi_create_object_with_named_properties | 使用給定的napi_value和鍵名建立js Object。鍵名必須為 string,且不可轉為number。 |
napi_coerce_to_native_binding_object | 強制將js Object和Native物件繫結。 |
napi_create_ark_runtime | 建立基礎執行時環境。 |
napi_destroy_ark_runtime | 銷燬基礎執行時環境。 |
napi_run_event_loop | 觸發底層的事件迴圈。 |
napi_stop_event_loop | 停止底層的事件迴圈。 |
napi_serialize | 將ArkTS物件轉換為native資料。 |
napi_deserialize | 將native資料轉為ArkTS物件。 |
napi_delete_serialization_data | 刪除序列化資料。 |
napi_call_threadsafe_function_with_priority | 將指定優先順序和入隊方式的任務投遞到ArkTS主執行緒。 |
napi_is_sendable | 判斷給定JS value是否是Sendable的。 |
napi_define_sendable_class | 建立一個sendable類。 |
napi_create_sendable_object_with_properties | 使用給定的napi_property_descriptor建立一個sendable物件。 |
napi_create_sendable_array | 建立一個sendable陣列。 |
napi_create_sendable_array_with_length | 建立一個指定長度的sendable陣列。 |
napi_create_sendable_arraybuffer | 建立一個sendable ArrayBuffer。 |
napi_create_sendable_typedarray | 建立一個sendable TypedArray。 |
napi_wrap_sendable | 包裹一個native例項到ArkTS物件中。 |
napi_wrap_sendable_with_size | 包裹一個native例項到ArkTS物件中並指定大小。 |
napi_unwrap_sendable | 獲取ArkTS物件包裹的native例項。 |
napi_remove_wrap_sendable | 移除並獲取ArkTS物件包裹的native例項。 |
napi_queue_async_work_with_qos
- napi_status napi_queue_async_work_with_qos(napi_env env,
- napi_async_work work,
- napi_qos_t qos);
用法同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);
napi_serialize
- napi_status napi_serialize(napi_env env,
- napi_value object,
- napi_value transfer_list,
- napi_value clone_list,
- void** result);
napi_deserialize
- napi_status napi_deserialize(napi_env env, void* buffer, napi_value* object);
napi_delete_serialization_data
- napi_status napi_delete_serialization_data(napi_env env, void* buffer);
napi_call_threadsafe_function_with_priority
- napi_status napi_call_threadsafe_function_with_priority(napi_threadsafe_function func,
- void *data,
- napi_task_priority priority,
- bool isTail);
napi_is_sendable
- napi_status napi_is_sendable(napi_env env, napi_value value, bool* result);
napi_define_sendable_class
- napi_status napi_define_sendable_class(napi_env env,
- const char* utf8name,
- size_t length,
- napi_callback constructor,
- void* data,
- size_t property_count,
- const napi_property_descriptor* properties,
- napi_value parent,
- napi_value* result);
napi_create_sendable_object_with_properties
- napi_status napi_create_sendable_object_with_properties(napi_env env,
- size_t property_count,
- const napi_property_descriptor* properties,
- napi_value* result);
napi_create_sendable_array
- napi_status napi_create_sendable_array(napi_env env, napi_value* result);
napi_create_sendable_array_with_length
- napi_status napi_create_sendable_array_with_length(napi_env env, size_t length, napi_value* result);
napi_create_sendable_arraybuffer
- napi_status napi_create_sendable_arraybuffer(napi_env env, size_t byte_length, void** data, napi_value* result);
napi_create_sendable_typedarray
- napi_status napi_create_sendable_typedarray(napi_env env,
- napi_typedarray_type type,
- size_t length,
- napi_value arraybuffer,
- size_t byte_offset,
- napi_value* result);
napi_wrap_sendable
- napi_status napi_wrap_sendable(napi_env env,
- napi_value js_object,
- void* native_object,
- napi_finalize finalize_cb,
- void* finalize_hint);
napi_wrap_sendable_with_size
- napi_status napi_wrap_sendable_with_size(napi_env env,
- napi_value js_object,
- void* native_object,
- napi_finalize finalize_cb,
- void* finalize_hint,
- size_t native_binding_size);
napi_unwrap_sendable
- napi_status napi_unwrap_sendable(napi_env env, napi_value js_object, void** result);
napi_remove_wrap_sendable
- napi_status napi_remove_wrap_sendable(napi_env env, napi_value js_object, void** result);
環境生命週期
介面 | 功能說明 |
---|---|
napi_set_instance_data | 繫結與當前執行的環境相關聯的資料項。 |
napi_get_instance_data | 檢索與當前執行的環境相關聯的資料項。 |
物件生命週期管理
介面 | 功能說明 |
---|---|
napi_add_env_cleanup_hook | 註冊環境清理鉤子函式。 |
napi_remove_env_cleanup_hook | 取消環境清理鉤子函式。 |
napi_add_async_cleanup_hook | 註冊清理非同步鉤子函式。 |
napi_remove_async_cleanup_hook | 取消清理非同步鉤子函式。 |
ArkTS基礎執行時環境
介面 | 功能說明 |
---|---|
napi_create_ark_runtime | 建立基礎執行時環境 |
napi_destroy_ark_runtime | 銷燬基礎執行時環境 |
其他實用工具
介面 | 功能說明 |
---|---|
node_api_get_module_file_name | 用於獲取載入項載入位置的絕對路徑。 |