Я хочу, чтобы моя библиотека C могла вызывать функцию JS несколько раз. Я заставил его работать с помощью Nan, но у меня возникли проблемы с преобразованием его в N-API/node-addon-api.
Как сохранить функцию обратного вызова JS и вызвать ее позже из C?
Вот что у меня есть с помощью Nan:
Persistent<Function> r_log;
void sendLogMessageToJS(char* msg) {
if (!r_log.IsEmpty()) {
Isolate* isolate = Isolate::GetCurrent();
Local<Function> func = Local<Function>::New(isolate, r_log);
if (!func.IsEmpty()) {
const unsigned argc = 1;
Local<Value> argv[argc] = {
String::NewFromUtf8(isolate, msg)
};
func->Call(Null(isolate), argc, argv);
}
}
}
NAN_METHOD(register_logger) {
Isolate* isolate = info.GetIsolate();
if (info[0]->IsFunction()) {
Local<Function> func = Local<Function>::Cast(info[0]);
Function * ptr = *func;
r_log.Reset(isolate, func);
myclibrary_register_logger(sendLogMessageToJS);
} else {
r_log.Reset();
}
}
Как сделать то же самое с node-addon-api? Все примеры, которые я видел, немедленно вызывают обратный вызов или используют AsyncWorker, чтобы каким-то образом сохранить обратный вызов. Я не могу понять, как это делает AsyncWorker.
N-API
, а не ее оболочки C++node-addon-api
. - person Evgeniy Berezovsky   schedule 29.01.2019