2016-06-10 1 views
0

J'essaie de mettre à jour un addon node.js en utilisant l'ancienne API v8.comment convertir le noeud-addon persistant <function> en local <function>?

Voici mon wrapper.cpp code:

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); 
} 

Si je comprends bien, l'auteur utilise une carte de Persistent<function> pour stocker callbacks en elle (voir callback_map std), mais quand node-gyp build, le compilateur jeter cet erreur:

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

Quelle est la meilleure façon de mettre à jour ce code à la nouvelle API v8 afin que je puisse l'exécuter avec la version du dernier noeud?

merci beaucoup.

+1

Assez sûr que ce problème est couvert ici: https://stackoverflow.com/questions/13826803/calling-javascript-function-from-a-c-callback-in-v8/28554065#28554065 –

Répondre

0

Je trouve la réponse dans cette article, les besoins persistants à convertir en une fonction locale d'abord:

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

Merci à @Scott Libère.