我尝试使我的节点模块方法异步。我创建了一个 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 数据结构是不安全的。所以我认为这是因为同步方法有效的原因。
- 我需要将所有变量转换为
Nan
数据类型吗?如果是这样,什么是等价的Nan::
,v8::Local<v8::Array>
以及v8::Handle<v8::Array>
如何转换它们,反之亦然? C++
代码执行失败时如何获取有用的异常信息?
完整的源代码可在此处获得:https ://github.com/sa/iso-8583/blob/30ac35796ba5014ad5668ac2919fddcb3b082580/functions.cc#L144 。只需克隆 reponpm install
和npm test
也许有人喜欢创建一个 PR :),无论如何,我对任何帮助提示感到非常高兴!我只是希望使现有方法异步更简单^^