我正在为C++库构建一个节点模块包装器,以通过Nan将日志信息传递给JavaScript。为此,NAN_Method可用于注册回调。回调处理程序必须通过vlAddLogListener()
将自身注册为C++库中的回调。 LoggingCallbackHandler
从库函数dispatchEvent
(一个C++函数)接收消息。如果我收到日志,我想调用JavaScript回调来传递数据。node.js Nan:在C++函数中调用JavaScript回调
函数dispatchEvent
未在Nan上下文中调用,因此我没有范围/上下文并且没有对v8的访问权限。如何调用JavaScript回调?
的代码看起来是这样的:
NAN_METHOD(registerLoggingCallback)
{
v8::Isolate* isolate = info.GetIsolate();
v8::Local<v8::Function> fun = info[0].As<v8::Function>();
lch = new LoggingCallbackHandler(isolate, fun);
}
LoggingCallbackHandler::LoggingCallbackHandler(v8::Isolate* isolate, v8::Local<v8::Function> fun) :
_cb(isolate, fun)
{
vlAddLogListener(&LoggingCallbackHandler::dispatchEvent, this);
}
void VL_CALLINGCONVENTION LoggingCallbackHandler::dispatchEvent(const char* eventData, void* clientData)
{
// here I want to process the data and call the JavaScript callback
v8::Local<v8::Function> f = v8::Local<v8::Function>::New(Nan::GetCurrentContext()->Global()->GetIsolate(), _cb);
Nan::MakeCallback(Nan::GetCurrentContext()->Global(), f, argc, argv);
}