node-addon-api передает объект другого класса в качестве аргумента функции обратного вызова
Как передать объект другого класса в качестве параметра функции обратного вызова в node-addon-api?
Фрагмент кода:
#include <napi.h>
#include "Third_Party_Library.h"
using namespace Napi;
class WorkerInit : public AsyncWorker {
public:
WorkerInit(Function &callback) : AsyncWorker(callback) {}
private:
void Execute() {
Third_Party_Library_Init();
}
void OnOK() {
Napi::HandleScope scope(Env());
Callback().Call(
{
Number::New(Env(), 0),
Third_Party_Library_Method()
}
);
}
};
Object Init(Env env, Object exports) {
exports.Set(String::New(env, "init"), Function::New(env, Init));
return exports;
};
NODE_API_MODULE(
module_name,
Init
);
Здесь я пытался выполнить код асинхронно. Но я не могу скомпилировать код, поскольку он выдает "нет подходящей функции-члена для вызова Callback().Call(" ошибка.
Мне нужно возвращаемое значение Third_Party_Library_Method() в моем сценарии js. Есть ли способ преобразовать этот объект в общий объект node-addon-api?
Я новичок в C++, и любая помощь будет высоко оценена.
0 ответов
Краткий ответ: преобразовать значения C++ в значения js перед передачей их в callback js
Callback().Call()
вызывает функцию обратного вызова javascript, которую вы передали асинхронному рабочему. Вы можете передавать только значения JavaScript в этот обратный вызов. Вы должны преобразовать результаты вашей сторонней библиотеки в значения js.
Я хотел бы предложить, чтобы вы присваивали результаты C++ сторонней библиотеки lib частной переменной-члену в методе Execute(). В методе OnOK() необходимо преобразовать значения C++ в значения js, прежде чем передавать их в обратный вызов.
Недавно я работал с асинхронным рабочим, и вы можете просмотреть файл async.cc и файл results.cc для справки. Файл async.cc содержит логику асинхронных классов, а result.cc - это место, где значения C++ преобразуются в значения js.
Удачи.