1

我尝试使我的节点模块方法异步。我创建了一个 AsyncWorker 类,但遇到了一些事情:/

我的 Nan::AsyncWorker 如下所示...

class PackerWorker : public Nan::AsyncWorker {
 public:
  PackerWorker(Nan::Callback *callback, v8::Handle<v8::Array> messageFields)
    : AsyncWorker(callback), messageFields(messageFields) {}
  ~PackerWorker() {}

  // Executed inside the worker-thread.
  // It is not safe to access V8, or V8 data structures
  // here, so everything we need for input and output
  // should go on `this`.
  void Execute () {
    //pack_iso8583(messageFields);
  }

  // Executed when the async work is complete
  // this function will be run inside the main event loop
  // so it is safe to use V8 again
  void HandleOKCallback () {
    //Nan::HandleScope scope;
    v8::Local<v8::Value> argv[] = { // currently just dummy values need to return v8::Local<v8::Array> result here!
        Nan::Null()
      , Nan::New<v8::Number>(1.75) 
    };

    callback->Call(2, argv);
  }

 private:
  v8::Handle<v8::Array> messageFields;
  //v8::Local<v8::Array> result;
};

--

  void Execute () {
    result = pack_iso8583(messageFields);
  }

当我实现此方法时,调用崩溃而没有其他信息。进一步阅读指出访问 V8 或 V8 数据结构是不安全的。所以我认为这是因为同步方法有效的原因。

  1. 我需要将所有变量转换为Nan数据类型吗?如果是这样,什么是等价的Nan::v8::Local<v8::Array>以及v8::Handle<v8::Array>如何转换它们,反之亦然?
  2. C++代码执行失败时如何获取有用的异常信息?

完整的源代码可在此处获得:https ://github.com/sa/iso-8583/blob/30ac35796ba5014ad5668ac2919fddcb3b082580/functions.cc#L144 。只需克隆 reponpm installnpm test

也许有人喜欢创建一个 PR :),无论如何,我对任何帮助提示感到非常高兴!我只是希望使现有方法异步更简单^^

4

0 回答 0