如何从NanAsyncWorker返回一个新对象
How to return a new object from NanAsyncWorker?
我正在开发一个node.js/io.js原生插件,我需要从异步回调创建一个新的原生对象。
使用 nan 助手,我得到了如下所示的内容:
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 参数的情况下包装对象。
帮助?
你应该手动创建javascript对象,例如:
//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;
};
}
然后在您的工作人员中:
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);
}
};
相关文章:
- 当一个新对象被分配到它的地址时,对象是否必须被销毁
- 有没有一种方法可以从函数中返回一个新对象或对现有对象的引用
- 如何异步销毁对象并立即分配一个新对象
- 我可以制作一个对象方法,如果单独调用,它将自行修改,但如果在复制初始化期间调用,则会返回一个新对象?
- 我应该如何在这个房间中创建一个新对象 - opengl
- C++如何为向量中的每个元素创建一个新对象?
- 从指针参考C 创建一个新对象
- 我如何从数组中创建一个新对象,该数组在C 中保存不同的对象
- 从现有指针C 创建一个新对象
- 按值返回不会创建一个新对象
- 如何从NanAsyncWorker返回一个新对象
- 将现有对象传递给构造函数或构造一个新对象
- 每次创建一个新对象或保留一个对象
- 创建一个新对象并传入方法参数
- 我应该清除作为参数传入的()容器,还是交换一个新对象
- 用C++实例化一个新对象
- 是基元铸造,在内存中创建一个新对象
- 在cpp中实例化一个新对象
- 在头文件中分配一个新对象
- 在函数中创建一个新对象-C++