uv_queue_work不在节点插件(c ++)中运行callback_method

我正在C ++中创build节点插件,我希望能够从其他线程进行callback。 要尝试它,我使用uv_queue_work和Nan进行以下testing。 如果我调用函数Hello,它应该为方法firstMethod启动一个新的线程,当它完成时,在另一个线程中调用下一个方法“callbackMethod”,在那里我将做一个callback到Javascript。 但由于某种原因,它运行第一种方法,而不运行第二种方法。

这是我的代码。

void Hello(const v8::FunctionCallbackInfo<v8::Value>& args) { v8::Isolate* isolate = v8::Isolate::GetCurrent(); v8::HandleScope scope(isolate); v8::Local<v8::Function> callback; callback = args[0].As<v8::Function>(); ListBaton* baton = new ListBaton(); baton->callback = new Nan::Callback(callback); uv_work_t* req = new uv_work_t(); req->data = baton; uv_queue_work(uv_default_loop(), req, firstMethod, callbackMethod); } void firstMethod(uv_work_t* req) { std::cout << "Entering PRE thread" << std::endl; sleep(1); std::cout << "Leaving PRE thread" << std::endl; } void callbackMethod(uv_work_t* req, int status) { v8::Isolate* isolate = v8::Isolate::GetCurrent(); v8::HandleScope scope(isolate); if(!isolate) { std::cout << "Isolate was null" << std::endl; isolate = v8::Isolate::New(); isolate->Enter(); } ListBaton* data = static_cast<ListBaton*>(req->data); v8::Local<v8::Value> argv[2] = { v8::Undefined(isolate), v8::String::NewFromUtf8(isolate,"WORLD") }; std::cout << "Sending callback" << std::endl; data->callback->Call(2,argv); } void init (v8::Handle<v8::Object> target) { NODE_SET_METHOD(target, "hello", Hello); } NODE_MODULE(HelloNan, init); 

如果你们可以帮助我,我会很感激…

如果是实际的尝试,而不是你的data-> callback-> Call(2,argv);

 // execute the callback Local<Function>::New(isolate, data->callback)->Call(isolate->GetCurrentContext()->Global(), 2, argv); // Free up the persistent function callback data->callback.Reset(); delete data;