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()内部崩溃。
发布于 2020-01-29 12:58:23
事实证明,不能在不同的线程上使用node-addon-api的AsyncContext。
你能做的就是使用n-api。幸运的是,node-addon-api只是n-api的一个薄薄的包装器,两者都可以混合和匹配。
https://stackoverflow.com/questions/54396087
复制相似问题