void AsyncCallbackWorker::CompleteCBWithCallback(napi_env env, napi_status status, void *data) { AsyncCallbackData *callbackData = reinterpret_cast<AsyncCallbackData *>(data); napi_value callbackArg[1] = {nullptr}; napi_create_double(env, callbackData->result, &callbackArg[0]); napi_...
同Callback方式在创建异步工作项前,我们先分别声明2个函数,分别用作于napi_create_async_work()函数的execute、complete参数。异步工作项创建OK后,将其存入上下文数据的asyncWork属性,并调用napi_queue_async_work()将异步工作项加入调度队列,由异步work线程池统一调度,原生方法返回Promise对象退出。 // 用户提供的上下...
在原生方法(初始化数据)、executeCB、completeCB之间传递数据structAddonData{napi_async_workasyncWork=nullptr;napi_deferreddeferred=nullptr;napi_refcallback=nullptr;doubleargs[2]={0};doubleresult=0;};// 业务逻辑处理函数,由worker线程池调度执行。
在原生方法(初始化数据)、executeCB、completeCB之间传递数据structAddonData{napi_async_work asyncWork=nullptr;napi_deferred deferred=nullptr;napi_ref callback=nullptr;doubleargs[2]={0};doubleresult=0;};// 业务逻辑处理函数,由worker线程池调度执行。
napi_async_complete_callback complete, void* data, napi_async_work* result) 参数说明: [in] env: 传入接口调用者的环境,包含js引擎等,由框架提供,默认情况下直接传入即可。 [in] async_resource: 可选项,关联async_hooks。 [in] async_resource_name: 异步资源标识符,主要用于async_hooks API暴露断言诊断...
1.2通过napi_create_async_work方式 napi_create_async_work接口说明 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, ...
env,napi_create_async_work(env,nullptr, workName, ExecuteCallback, CompleteCallback, data, &...
libuv是一个基于事件驱动的异步io库,NAPI用它来实现了异步工作处理流程。 napi_create_async_work()创建异步工作时要求传入的execute_callback()和complete_callback(),也是沿用了libuv内部uv_queue_work的工作方式(见OpenHarmony\third_party\libuv\src\threadpool.c)。
napi_async_execute_callback与napi_async_complete_callback二者皆是与回调函数一起运行的函数指针,函数签名需要满足以下: typedef void (napi_async_execute_callback)(napi_env env, voiddata); typedef void (napi_async_complete_callback)(napi_env env,napi_status status,voiddata); ...
WorkComplete(napi_env env, napi_status status, void *data) { CallbackData *callbackData = reinterpret_cast<CallbackData *>(data); napi_release_threadsafe_function(callbackData->tsfn, napi_tsfn_release); napi_delete_async_work(env, callbackData->work); callbackData->tsfn = nullptr; ...