如何从NanAsyncWorker返回一个新对象? [英] How to return a new object from NanAsyncWorker?
本文介绍了如何从NanAsyncWorker返回一个新对象?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在开发一个node.js/io.js本机插件,我需要从异步回调中创建一个新的本机对象.
I'm working on a node.js/io.js native plugin, and I need to create a new native object from an async callback.
使用nan助手,我看起来像这样:
Using the nan helpers, I've got something that looks like:
class MyObject : public node::ObjectWrap
{ /* definition */ };
class MyWorker : public NanAsyncWorker
{
bool varForMyObject;
virtual void Execute() {/* do stuff and sets varForMyObject */}
virtual void HandleOKCallback() {
NanScope();
MyObject* obj = new MyObject(varForMyObject);
Local<Value> argv[] = {
NanNull(),
obj // ???
};
callback->Call(2, argv);
}
};
我无法弄清楚如何在不访问args参数的情况下包装对象.
I cannot figure out how to wrap the object without having access to the args parameters.
帮助?
推荐答案
您应手动创建javascript对象,例如:
You should create javascript object manually, example:
//some_class.h
class SomeClass {
public:
std::string id;
int value;
SomeClass() {};
SomeClass(std::string id, int value): id(id), value(value) {};
static SomeClass *unpack(v8::Isolate *isolate, const v8::Local<v8::Object> object) {
using namespace v8;
SomeClass *p = new SomeClass();
Local<Value> _id = object->Get(String::NewFromUtf8(isolate, "id"));
String::Utf8Value utf8String(_id);
p->id = std::string(*utf8String);
p->value = static_cast<int>(object->Get(String::NewFromUtf8(isolate, "value"))->NumberValue());
return p;
}
static v8::Local<v8::Object> pack(v8::Isolate *isolate, const SomeClass *object) {
using namespace v8;
Local<Object> obj = Object::New(isolate);
obj->Set(String::NewFromUtf8(isolate, "id"), String::NewFromUtf8(isolate, object->id.c_str()));
obj->Set(String::NewFromUtf8(isolate, "value"), Integer::New(isolate, object->value));
return obj;
};
}
然后在您的工作人员中:
then in your worker:
class MyObject : public node::ObjectWrap
{ /* definition */ };
class MyWorker : public NanAsyncWorker
{
virtual void Execute() {/* do stuff and sets varForMyObject */}
virtual void HandleOKCallback() {
NanScope();
SomeClass *c = new SomeClass("id", 123);
Local<Value> argv[] = {
NanNull(),
SomeClass::pack(v8::Isolate::GetCurrent(), c)
};
callback->Call(2, argv);
}
};
这篇关于如何从NanAsyncWorker返回一个新对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文