如何在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 ++的新手,我们将不胜感激任何帮助。
答案 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值的地方。
祝你好运。