已合并
与docs仓同源保持一致示例代码 #6946
与docs仓同源保持一致示例代码 #6946
已合并
wang_xiaofei创建于 2025年10月25日
共 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 and12 * See the License for the specific language governing permissions and
13 * limitations under the License.13 * limitations under the License.
14 */14 */
15- 
16-#include "napi/native_api.h"
17- 
18// [Start napi_create_async_work]15// [Start napi_create_async_work]
16+#include "napi/native_api.h"
17+// 调用方提供的data context,该数据会传递给execute和complete函数
19struct CallbackData {18struct 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#include "napi/native_api.h"17#include "napi/native_api.h"
18 18 
19+static constexpr int INT_ARG_2 = 2; // 入参索引
19static constexpr int INT_ARG_3 = 3; // 入参索引20static constexpr int INT_ARG_3 = 3; // 入参索引
20 21 
21static napi_value AsynchronousWork(napi_env env, napi_callback_info info)22static 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]
17import { hilog } from '@kit.PerformanceAnalysisKit';17import { hilog } from '@kit.PerformanceAnalysisKit';
18import testNapi from 'libentry.so';18import 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@Entry22@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 })