gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:18:53 25 4
gpt4 key购买 nike

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() .

最佳答案

原来是 node-addon-api 的 AsyncContext不能在不同的线程上使用。

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

关于node.js - 如何异步使用 node-addon-api 的 AsyncContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54396087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com