同步方式中所有的代码处理都在原生方法(主线程)中完成,异步方式依赖NAPI框架提供的napi_create_async_work()函数创建异步工作项,原生方法被调用时,原生方法完成数据接收、转换,存入上下文数据,之后创建一个异步工作项,并加入调度队列,由异步工作线程池统一调度,原生方法返回空值(Callback方式)或返回Promise对象(Promise方式...
staticnapi_valueaddAsyncCallback(napi_env env,napi_callback_info info){// 获取3个参数,值的类型是js类型(napi_value)size_targc=3;napi_value args[3];napi_value thisArg=nullptr;napi_get_cb_info(env,info,&argc,args,&thisArg,nullptr);...// 异步工作项上下文用户数据,传递到异步工作项的execute...
在原生方法(初始化数据)、executeCB、completeCB之间传递数据structAddonData{napi_async_workasyncWork=nullptr;napi_deferreddeferred=nullptr;napi_refcallback=nullptr;doubleargs[2]={0};doubleresult=0;};// 业务逻辑处理函数,由worker线程池调度执行。
napi_valueasync_resource_name,napi_async_execute_callbackexecute,napi_async_complete_callbackcomplete,void*data,napi_async_work*result)参数说明:[in]env:传入接口调用者的环境,包含js引擎等,由框架提供,默认情况下直接传入即可。
一. native 与 ts 异步调用 (async\_library) 1.1 通过libuv接口 通过libuv 的方式将JS任务抛到loop中执行,即回到主线程执行 (1)定义变量保存env struct CallbackContext { napi_env env = nullptr; napi_ref callbackRef = nullptr; int retData = 0; ...
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, ...
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); napi_value HttpRequestHandler::fetch(napi_env env, std::string url,...
env,napi_create_async_work(env,nullptr, workName, ExecuteCallback, CompleteCallback, data, &...
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); ...
使用NAPI扩展TS接口时,常用属性和实现接口的基本用法