如何异步使用node-addon-api的AsyncContext

问题描述 投票:7回答:1

AsyncContext的文档具有可同步工作的以下示例(仅作了少许修改,但仍可正常工作):

AsyncContext

我想知道如何异步使用它-这是我的最新照片:

#include "napi.h"

void MakeCallbackWithAsyncContext(const Napi::CallbackInfo& info)
{
  Napi::Function callback = info[0].As<Napi::Function>();
  Napi::Object resource = info.Env().Global().As<Napi::Object>();;    
  Napi::AsyncContext context(info.Env(), "async_context_test", resource);

  callback.MakeCallback(Napi::Object::New(info.Env()),
      std::initializer_list<napi_value>{}, context);
}

程序在Napi::AsyncContext* _context; Napi::FunctionReference* _callback; Napi::Object* _resource; void CallBack() { _callback->MakeCallback(*_resource, std::initializer_list<napi_value>{}, *_context); } void MakeCallbackWithAsyncContext(const Napi::CallbackInfo& info) { Napi::Function cb = info[0].As<Napi::Function>(); _callback = new Napi::FunctionReference(Napi::Persistent(cb)); _callback->SuppressDestruct(); _resource = new Napi::ObjectReference(Napi::Persistent(env.Global())); _resource->SuppressDestruct(); _context = new Napi::AsyncContext(info.Env(), "async_context_test", _resource->Value()); // run CallBack() in different thread } 内部崩溃。

node.js node.js-addon n-api node-addon-api
1个回答
1
投票

事实证明,node-addon-api的CallBack()不能在其他线程上使用。

您可以使用AsyncContext。幸运的是,node-addon-api只是n-api的薄包装,并且可以将两者混合和匹配。

© www.soinside.com 2019 - 2024. All rights reserved.