另一个类的node-addon-api传递对象作为回调函数参数

时间:2019-03-01 08:33:42

标签: javascript c++ node.js 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
);

在这里,我一直在尝试异步执行代码。但是我无法编译代码,因为它抛出“没有匹配的成员函数来调用'Call'Callback()。Call(“错误。

我需要在我的js脚本中返回Third_Party_Library_Method()的值。有什么方法可以将此对象转换为通用的node-addon-api对象?

我是C ++的新手,我们将不胜感激任何帮助。

1 个答案:

答案 0 :(得分:0)

简短答案:将c ++值转换为js值,然后再将其传递给js回调

Callback().Call()正在调用您传递给异步工作程序的javascript回调函数。您只能将javascript值传递给该回调。您必须将第三方库的结果转换为js值。

我建议您将第三方lib的c ++结果分配给Execute()方法中的私有成员变量。在OnOK()方法中,必须先将c ++值转换为js值,然后再将其传递给回调。

我最近正在与异步工作人员一起工作,您可以查看async.cc文件和results.cc文件以供参考。 async.cc文件包含异步类的逻辑,而results.cc是将c ++值转换为js值的地方。

祝你好运。