从node.js本地代码调用callback

我正在使用c ++编写node.js的附加组件。

这里有一些片段:

class Client : public node::ObjectWrap, public someObjectObserver { public: void onAsyncMethodEnds() { Local<Value> argv[] = { Local<Value>::New(String::New("TheString")) }; this->callback->Call(Context::GetCurrent()->Global(), 1, argv); } .... private: static v8::Handle<v8::Value> BeInitiator(const v8::Arguments& args) { HandleScope scope; Client* client = ObjectWrap::Unwrap<Client>(args.This()); client->someObject->asyncMethod(client, NULL); return scope.Close(Boolean::New(true)); } static v8::Handle<v8::Value> SetCallback(const v8::Arguments& args) { HandleScope scope; Client* client = ObjectWrap::Unwrap<Client>(args.This()); client->callback = Persistent<Function>::New(Handle<Function>::Cast(args[0])); return scope.Close(Boolean::New(true)); } 

我需要保存一个JavaScript函数作为callback以后再调用它。 Client类是另一个对象的观察者,应该从onAsyncMethodEnds调用javascriptcallback。 不幸的是,当我调用函数“BeInitiator”时,在callbackCall()之前收到“Bus error:10”

感谢您的build议

你不能->Call从另一个线程->Call 。 JavaScript和Node是单线程的,试图从另一个线程调用一个函数就等于试图一次运行两个JS线程。

你应该重新工作你的代码,而不是这样做,或者你应该阅读libuv的线程库。 它提供了uv_async_send ,它可以用来从单独的线程触发主JS循环中的callback。

这里有文档: http : //nikhilm.github.io/uvbook/threads.html

Interesting Posts