node-addon-api передает объект другого класса в качестве аргумента функции обратного вызова - PullRequest
0 голосов
/ 01 марта 2019

Как передать объект другого класса в качестве параметра функции обратного вызова в 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 (» error.

Мне нужно возвращаемое значение Third_Party_Library_Method () в моем jsСценарий. Есть ли способ преобразовать этот объект в общий объект node-addon-api?

Я новичок в C ++, и любая помощь будет высоко оценена.

1 Ответ

0 голосов
/ 04 марта 2019

краткий ответ: преобразуйте значения c ++ в значения js перед передачей их в обратный вызов js

Callback().Call() вызывает функцию обратного вызова javascript, переданную вами асинхронному рабочему.Вы можете передавать только значения JavaScript в этот обратный вызов.Вы должны преобразовать результаты вашей сторонней библиотеки в значения js.

Я бы предложил назначить результаты c ++ сторонней библиотеки lib частной переменной-члену в методе Execute ().В методе OnOK () необходимо преобразовать значения c ++ в значения js, прежде чем передавать их в обратный вызов.

Я недавно работал с асинхронным рабочим, и вы можете просмотреть async.cc файл и results.cc файл для справки.Файл async.cc содержит логику асинхронных классов, а результат .cc означает, что значения c ++ преобразуются в значения js.

Удачи.

...