Как использовать сложные типы данных v8 в асинхронном рабочем классе модуля нативного узла?
Я пытаюсь сделать методы моего модуля узла асинхронными. Я создал класс 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/s-a/iso-8583/blob/30ac35796ba5014ad5668ac2919fddcb3b082580/functions.cc#L144. Просто клонируйте репо и npm install
а также npm test
Может, кому-то нравится создавать пиар:), в любом случае, я очень рад любым подсказкам! Я просто надеялся, что было бы более тривиально сделать существующие методы асинхронными ^^