Как мне обновить собственный аддон Node.js, чтобы использовать новый API?
Мне нужен старый собственный аддон Node.js, который мне нужен для работы, но он больше не работает для Node.js 12 и выше из-за устаревания многих нативных API. Из десятков ошибок я исправил все, кроме одной, которая связана с инициализацией и вызовом функции обратного вызова. Для нового API требуется 4 аргумента, а для старого - 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);
}
}
В частности, обратите внимание на новый API, который использует 4 аргумента, и сравните его со старым, которому требуется только три. Я не могу понять, какие параметры вводить, поскольку в Интернете практически нет руководств по новому API, а в Интернете полно примеров старого сломанного.
Может кто-то указать мне верное направление? Я получаю точное сообщение об ошибкеerror C2660: 'v8::Function::Call': function does not take 3 arguments
в строке, которую я пометил комментарием выше.
1 ответ
Пройдя через журнал изменений nan, прочитав источники nan, я нашел новый способ вызова обратных вызовов. В частности, строка:
Nan::New(r->callback)->Call(Nan::GetCurrentContext()->Global(), 1, argv);
становится
Nan::Call(Nan::New(r->callback), Nan::GetCurrentContext()->Global(), 1, argv);