首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何异步使用node-addon-api的AsyncContext

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

Stack Overflow用户
提问于 2019-01-28 13:38:00
回答 1查看 797关注 0票数 7

AsyncContext的文档有这个同步工作的示例(只需稍作修改,但仍在运行):

代码语言:javascript
复制
#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);
}

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

代码语言:javascript
复制
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()内部崩溃。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-29 12:58:23

事实证明,不能在不同的线程上使用node-addon-api的AsyncContext

你能做的就是使用n-api。幸运的是,node-addon-api只是n-api的一个薄薄的包装器,两者都可以混合和匹配。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54396087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档