1

我的工作需要一个旧的 Node.js 本机插件,但由于弃用了许多本机 API,因此不再适用于 Node.js 12 及更高版本。在几十个错误中,除了一个与初始化和调用回调函数有关的错误外,我已经修复了所有错误。新的 API 需要 4 个参数,而旧的 API 需要 3 个。这是损坏的代码:

void node_mpg123_feed_after (uv_work_t *req) {
  Nan::HandleScope scope;
  feed_req *r = (feed_req *)req->data;

  Local<Value> argv[1];
  argv[0] = Nan::New<Integer>(r->rtn);

  Nan::TryCatch try_catch;

  Nan::New(r->callback)->Call(Nan::GetCurrentContext()->Global(), 1, argv); //Compilation error in this line

  // cleanup
  r->callback.Reset();
  delete r;

  if (try_catch.HasCaught()) {
    FatalException(try_catch);
  }
}

具体来说,请注意使用 4 个参数的新 API,并将其与只需要三个参数的旧 API 进行对比。我不知道要输入什么参数,因为互联网上基本上没有新 API 的教程,而且互联网上充斥着旧 API 的示例。

谁能指出我正确的方向?我收到的确切错误消息error C2660: 'v8::Function::Call': function does not take 3 arguments在我用上面的注释标记的行中。

4

1 回答 1

0

在阅读了nan 源代码的 nan changelog 之后,我发现了一种调用回调的新方法。具体来说,该行:

Nan::New(r->callback)->Call(Nan::GetCurrentContext()->Global(), 1, argv);

变成

Nan::Call(Nan::New(r->callback), Nan::GetCurrentContext()->Global(), 1, argv);
于 2019-12-24T14:08:03.927 回答