status = napi_create_async_work(env, NULL, NULL, ExecuteWork, WorkComplete, NULL, &work); if (status != napi_ok) { napi_throw_error(env, NULL, "Unable to create async work"); } // 将工作任务队列中的工作分配给线程池执行 status = napi_queue_async_work(env, work); if (status !
napi_create_async_work的作用是创建一个异步工作,它接收一个JavaScript回调函数和一个完成回调函数作为参数。JavaScript回调函数会在一个新的线程中执行,执行完成后会调用完成回调函数。 下面是一个使用napi_create_async_work的简单示例代码: #include<node_api.h>#include<stdio.h>napi_valuemyAsyncFunction(napi_en...
napi_callback_info info){...napi_create_reference(env,args[2],1,&addonData->callback);// 创建async work,创建成功后通过最后一个参数接收async work的handlenapi_value resourceName=nullptr;napi_create_string_utf8(env,"addAsyncCallback",NAPI_AUTO_LENGTH,&resource...
使用napi_create_async_work 进行异步调用,多次调用,在napi_create_async_work中的napi_async_execute_...
napi_status napi_create_async_work(napi_env env, napi_value async_resource, napi_value async_resource_name, napi_async_execute_callback execute, napi_async_complete_callback complete, void* data, napi_async_work* result) [in] env:调用 API 的环境。
napi_create_async_work接口说明 napi_create_async_work里有两个回调: execute:用于异步处理业务逻辑。因为不在js线程中,所以不允许调用napi的接口。业务逻辑的返回值可以返回到complete回调中处理。 complete:可以调用napi的接口,将execute中的返回值封装成js对象返回。此回调在js线程中执行。
在创建异步工作项前,我们先分别声明2个函数,分别用作于napi_create_async_work()函数的execute、complete参数。异步工作项创建OK后,将其存入上下文数据的asyncWork属性,并调用napi_queue_async_work()将异步工作项加入调度队列,由异步work线程池统一调度,原生方法返回空值退出。
napi_create_async_work里有两个回调: execute:用于异步处理业务逻辑。因为不在JS线程中,所以不允许调用napi的接口。业务逻辑的返回值可以返回到complete回调中处理。 complete:可以调用napi的接口,将execute中的返回值封装成JS对象返回。此回调在JS线程中执行。
napi_create_async_work(env, nullptr, resourceName, ExecuteWork, WorkComplete, callbackData, &callbackData->work); // 将异步任务加入到异步队列中 napi_queue_async_work(env, callbackData->work); return nullptr; } 运行结果 场景三: 伙伴在 ArkTS/TS 侧已定义接口,当伙伴使用C++ 代码实现业务逻辑...
auto asyncContext = new CallbackContext(); asyncContext->env = env; napi_create_ref...