用于节点js的c ++ v8的异步模块,与结构中的类型相关的错误

时间:2013-06-07 11:47:54

标签: javascript c++ node.js struct v8

我正在编写异步模块,但我无法传递数组结构。请帮忙。那是出现的错误。怎么避免呢? 错误C2440:'=':无法从'v8 :: Handle'转换为'v8 :: Array *'

struct Async {
    Handle<v8::Array> result;
}
void wmiWorker(uv_work_t* req) {
    Async* request = (Async*)req->data;
    *(request->result) = getArray(1);
}
Handle<Array> getArray(int x) {

  HandleScope handle_scope;
  Handle<Array> array = Array::New(3);

  if (array.IsEmpty())
    return Handle<Array>();

  array->Set(0, Integer::New(x));
  return handle_scope.Close(array);
}

1 个答案:

答案 0 :(得分:1)

你的行

*(request->result) = getArray(1);

Handle<Array>分配给*(Handle<Array>)(这意味着Array*),这是无效的。

然而即便如此,还有一个重要因素是您没有考虑到这一点。您的wmiWorker函数正在一个单独的线程中运行。 NodeJS和V8只允许JS的单个执行线程,你试图做的是在一个单独的线程内创建一个JS数组。

相反,您需要创建一个向量或其他内容,并从工作回调的after_work回调内部生成V8数组。