将空参数传递给 v8 回调
Passing null argument to v8 callback
我有一个本机插件,它实现了一个函数,该函数接受回调并使用可能的错误和结果调用该回调。
我目前有来自 NodeJS 文档的以下代码,它直接使用结果调用该回调:
v8::Local<v8::Function> callback = v8::Local<v8::Function>::Cast(args[0]);
const unsigned callback_argc = 1;
v8::Local<v8::Value> callback_arguments[callback_argc] = { physical_drives };
callback->Call(v8::Context::GetCurrent()->Global(), callback_argc, callback_arguments);
在某些情况下,我想用 null
第一个参数调用回调:
v8::Local<v8::Value> callback_arguments[callback_argc] = {
v8::Null()
physical_drives
};
这失败了,因为我无法使用 v8::Null()
或 v8::Undefined()
初始化 callback_arguments
,因为这些函数 return a v8::Primitive
而 callback_arguments
包含 v8::Value
s.
也无法进行手动转换:
v8::Local<v8::Value>::Cast(v8::Null());
将 null
/undefined
值传递给回调的正确方法是什么?
v8::Primitive
是 v8::Value
的子类,因此向上转型绝对没问题。代码无法编译,因为您无法将 v8::Handle
向下转换为 v8::Local
.
只需更改 callback_arguments
的类型:
v8::Handle<v8::Value> callback_arguments[callback_argc] = {
v8::Null(),
physical_drives
};
这应该编译得很好。
我有一个本机插件,它实现了一个函数,该函数接受回调并使用可能的错误和结果调用该回调。
我目前有来自 NodeJS 文档的以下代码,它直接使用结果调用该回调:
v8::Local<v8::Function> callback = v8::Local<v8::Function>::Cast(args[0]);
const unsigned callback_argc = 1;
v8::Local<v8::Value> callback_arguments[callback_argc] = { physical_drives };
callback->Call(v8::Context::GetCurrent()->Global(), callback_argc, callback_arguments);
在某些情况下,我想用 null
第一个参数调用回调:
v8::Local<v8::Value> callback_arguments[callback_argc] = {
v8::Null()
physical_drives
};
这失败了,因为我无法使用 v8::Null()
或 v8::Undefined()
初始化 callback_arguments
,因为这些函数 return a v8::Primitive
而 callback_arguments
包含 v8::Value
s.
也无法进行手动转换:
v8::Local<v8::Value>::Cast(v8::Null());
将 null
/undefined
值传递给回调的正确方法是什么?
v8::Primitive
是 v8::Value
的子类,因此向上转型绝对没问题。代码无法编译,因为您无法将 v8::Handle
向下转换为 v8::Local
.
只需更改 callback_arguments
的类型:
v8::Handle<v8::Value> callback_arguments[callback_argc] = {
v8::Null(),
physical_drives
};
这应该编译得很好。