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.

Удачи.

Другие вопросы по тегам