从node.js本机代码调用回调

问题描述 投票:1回答:2

我正在使用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函数另存为回调,以便以后调用。Client类是另一个对象的观察者,应从onAsyncMethodEnds调用javascript回调。不幸的是,当我调用函数“ BeInitiator”时,在回调Call()

之前收到“ Bus error:10”错误

感谢您的建议

c++ node.js callback native bus-error
2个回答
3
投票

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


0
投票

我尝试过执行线程安全功能,并且有效!看到这里:https://github.com/nodejs/node-addon-api/blob/master/doc/threadsafe_function.md

© www.soinside.com 2019 - 2024. All rights reserved.