如何将node-addon Persistent <function>转换为Local <function>?

时间:2016-06-10 11:32:24

标签: c++ node.js v8 embedded-v8 node.js-addon

我尝试使用旧的v8 API更新node.js插件。

这是我的wrapper.cpp代码:

std::map<int, Persistent<Function> > WrapMdUser::callback_map;

void WrapMdUser::FunCallback(CbRtnField *data) {
std::map<int, Persistent<Function> >::iterator cIt = callback_map.find(data->eFlag);
Local<Number> argv[1] = Nan::New(data->nReason);
cIt->second->Call(Nan::GetCurrentContext()->Global(), 1, argv);
}

如果我理解正确,作者正在使用Persistent<function>的映射来存储回调(请参阅callback_map std),但是当node-gyp build时,编译器会抛出此错误:

wrapper.cpp:331:19: error: base operand of ‘->’ has non-pointer type ‘v8::Persistent<v8::Function>’
cIt->second->Call(Nan::GetCurrentContext()->Global(), 1, argv);

将此代码更新为新的v8 API的最佳方法是什么,以便我可以使用最后一个节点版本运行它?

非常感谢。

1 个答案:

答案 0 :(得分:0)

我在article中找到了答案,持久性需要先转换为本地函数:

Local<Function>::New(isolate, work->callback)->
Call(isolate->GetCurrentContext()->Global(), 1, argv);

感谢@Scott Frees。