已合并
与docs仓同源保持一致示例代码 #6946
wang_xiaofei创建于 2025年10月25日
与docs仓同源保持一致示例代码 #6946
已合并
共 5 个文件变更+14-8
| @@ -51,6 +51,7 @@ static void CompleteCB(napi_env env, napi_status status, void *data) | |||
| 51 | napi_delete_reference(env, callbackData->callbackRef); | 51 | napi_delete_reference(env, callbackData->callbackRef); |
| 52 | napi_delete_async_work(env, callbackData->asyncWork); | 52 | napi_delete_async_work(env, callbackData->asyncWork); |
| 53 | delete callbackData; | 53 | delete callbackData; |
| 54 | + callbackData = nullptr; | ||
| 54 | } | 55 | } |
| 55 | // [End napi_async_second_call_back_work] | 56 | // [End napi_async_second_call_back_work] |
| 56 | // [EndExclude napi_create_queue_async_work] | 57 | // [EndExclude napi_create_queue_async_work] |
| @@ -12,10 +12,9 @@ | |||
| 12 | * See the License for the specific language governing permissions and | 12 | * See the License for the specific language governing permissions and |
| 13 | * limitations under the License. | 13 | * limitations under the License. |
| 14 | */ | 14 | */ |
| 15 | - | ||
| 16 | - | ||
| 17 | - | ||
| 18 | // [Start napi_create_async_work] | 15 | // [Start napi_create_async_work] |
| 16 | + | ||
| 17 | +// 调用方提供的data context,该数据会传递给execute和complete函数 | ||
| 19 | struct CallbackData { | 18 | struct CallbackData { |
| 20 | napi_async_work asyncWork = nullptr; | 19 | napi_async_work asyncWork = nullptr; |
| 21 | napi_deferred deferred = nullptr; | 20 | napi_deferred deferred = nullptr; |
| @@ -47,6 +46,7 @@ static void CompleteCB(napi_env env, napi_status status, void *data) | |||
| 47 | 46 | ||
| 48 | napi_delete_async_work(env, callbackData->asyncWork); | 47 | napi_delete_async_work(env, callbackData->asyncWork); |
| 49 | delete callbackData; | 48 | delete callbackData; |
| 49 | + callbackData = nullptr; | ||
| 50 | } | 50 | } |
| 51 | // [End napi_second_call_back_main] | 51 | // [End napi_second_call_back_main] |
| 52 | // [EndExclude napi_create_async_work] | 52 | // [EndExclude napi_create_async_work] |
| @@ -16,6 +16,7 @@ | |||
| 16 | // [Start napi_async_open_close_callback_scope] | 16 | // [Start napi_async_open_close_callback_scope] |
| 17 | 17 | ||
| 18 | 18 | ||
| 19 | +static constexpr int INT_ARG_2 = 2; // 入参索引 | ||
| 19 | static constexpr int INT_ARG_3 = 3; // 入参索引 | 20 | static constexpr int INT_ARG_3 = 3; // 入参索引 |
| 20 | 21 | ||
| 21 | static napi_value AsynchronousWork(napi_env env, napi_callback_info info) | 22 | static napi_value AsynchronousWork(napi_env env, napi_callback_info info) |
| @@ -28,7 +29,7 @@ static napi_value AsynchronousWork(napi_env env, napi_callback_info info) | |||
| 28 | // 提取参数中的资源、接收器对象和函数 | 29 | // 提取参数中的资源、接收器对象和函数 |
| 29 | napi_value resource = args[0]; | 30 | napi_value resource = args[0]; |
| 30 | napi_value recv = args[1]; | 31 | napi_value recv = args[1]; |
| 31 | - napi_value func = args[2]; | 32 | + napi_value func = args[INT_ARG_2]; |
| 32 | napi_value argv[1] = {nullptr}; | 33 | napi_value argv[1] = {nullptr}; |
| 33 | argv[0] = args[INT_ARG_3]; | 34 | argv[0] = args[INT_ARG_3]; |
| 34 | // 获取函数的类型 | 35 | // 获取函数的类型 |
| @@ -46,7 +47,7 @@ static napi_value AsynchronousWork(napi_env env, napi_callback_info info) | |||
| 46 | } | 47 | } |
| 47 | // 打开回调作用域 | 48 | // 打开回调作用域 |
| 48 | napi_callback_scope scope = nullptr; | 49 | napi_callback_scope scope = nullptr; |
| 49 | - napi_open_callback_scope(env, resource, context, &scope); | 50 | + status = napi_open_callback_scope(env, resource, context, &scope); |
| 50 | if (status != napi_ok) { | 51 | if (status != napi_ok) { |
| 51 | napi_throw_error(env, nullptr, "napi_open_callback_scope fail"); | 52 | napi_throw_error(env, nullptr, "napi_open_callback_scope fail"); |
| 52 | return nullptr; | 53 | return nullptr; |
| @@ -60,7 +61,7 @@ static napi_value AsynchronousWork(napi_env env, napi_callback_info info) | |||
| 60 | return nullptr; | 61 | return nullptr; |
| 61 | } | 62 | } |
| 62 | // 关闭回调作用域 | 63 | // 关闭回调作用域 |
| 63 | - napi_close_callback_scope(env, scope); | 64 | + status = napi_close_callback_scope(env, scope); |
| 64 | if (status != napi_ok) { | 65 | if (status != napi_ok) { |
| 65 | napi_throw_error(env, nullptr, "napi_close_callback_scope fail"); | 66 | napi_throw_error(env, nullptr, "napi_close_callback_scope fail"); |
| 66 | return nullptr; | 67 | return nullptr; |
| @@ -14,5 +14,5 @@ | |||
| 14 | */ | 14 | */ |
| 15 | 15 | ||
| 16 | // [Start napi_async_open_close_callback_scope_api] | 16 | // [Start napi_async_open_close_callback_scope_api] |
| 17 | -export const asynchronousWork: (object: Object, obj: Object, fun: Function, num: number) => number | void; | 17 | +export const asynchronousWork: (object: Object, obj: Object, fun: Function, num: number) => number | undefined; |
| 18 | // [End napi_async_open_close_callback_scope_api] | 18 | // [End napi_async_open_close_callback_scope_api] |
| @@ -16,7 +16,7 @@ | |||
| 16 | // [Start ark_napi_async_open_close_callback_scope] | 16 | // [Start ark_napi_async_open_close_callback_scope] |
| 17 | import { hilog } from '@kit.PerformanceAnalysisKit'; | 17 | import { hilog } from '@kit.PerformanceAnalysisKit'; |
| 18 | import testNapi from 'libentry.so'; | 18 | import testNapi from 'libentry.so'; |
| 19 | -import process from '@ohos.process'; | 19 | +import { process } from '@kit.ArkTS'; |
| 20 | 20 | ||
| 21 | // [StartExclude ark_napi_async_open_close_callback_scope] | 21 | // [StartExclude ark_napi_async_open_close_callback_scope] |
| 22 | @Entry | 22 | @Entry |
| @@ -47,10 +47,14 @@ struct Index { | |||
| 47 | testNapi.asynchronousWork({}, process.ProcessManager, (num: number) => { | 47 | testNapi.asynchronousWork({}, process.ProcessManager, (num: number) => { |
| 48 | return num; | 48 | return num; |
| 49 | }, 123)); | 49 | }, 123)); |
| 50 | + // [StartExclude ark_napi_async_open_close_callback_scope] | ||
| 50 | this.result = 'customAsyncSuccess'; | 51 | this.result = 'customAsyncSuccess'; |
| 52 | + // [EndExclude ark_napi_async_open_close_callback_scope] | ||
| 51 | } catch (error) { | 53 | } catch (error) { |
| 52 | hilog.error(0x0000, 'testTag', 'Test Node-API asynchronousWork error: %{public}s', error.message); | 54 | hilog.error(0x0000, 'testTag', 'Test Node-API asynchronousWork error: %{public}s', error.message); |
| 55 | + // [StartExclude ark_napi_async_open_close_callback_scope] | ||
| 53 | this.result = 'customAsyncFail'; | 56 | this.result = 'customAsyncFail'; |
| 57 | + // [EndExclude ark_napi_async_open_close_callback_scope] | ||
| 54 | } | 58 | } |
| 55 | // [End ark_napi_async_open_close_callback_scope] | 59 | // [End ark_napi_async_open_close_callback_scope] |
| 56 | }) | 60 | }) |