Как использовать AsyncContext узла-аддона-API в асинхронном режиме

Документы для 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
}

Программа вылетает внутри CallBack(),

0 ответов

Оказывается, что node-addon-api AsyncContext нельзя использовать в другом потоке.

Что вы можете сделать, так это использовать n-api. К счастью, node-addon-api - это всего лишь тонкая оболочка для n-api, и оба могут быть смешаны и сопоставлены.

Другие вопросы по тегам