内容目录
背景
node js 自己的demo ,直接把node js 回调传给c++ 然后直接回调,这样子是没有问题,但我们需要一个长期的回调,node js没有说明,网上貌似也没有对应的文档,我找了好久也没有找到。后面自己翻看node js 官网文档API ,一个个看,找到一个能用的api。
解决方法:napi_create_reference
回调对象,如果你直接保存,你下次回调的时候发现会发生错误,我分析错误信息是对象已经不能用,我看了官网文档,node js 自己管理申明周期,所以我猜测声明周期的问题,于是找他们引用的API,于是就是上面的API
napi_ref my_call_ref = nullptr; //全局
napi_value call_back = args[1]; //传递过来的参数
status = napi_create_reference(env, call_back, 1, &my_call_ref);
//然后底层回调过来时候,调用node js回调函数就可以了
status = napi_get_reference_value(global_env, msg_recv_ref, &result);
if (result != nullptr) {
status = napi_call_function(global_env, global, result, 1, &buffer, &result);
//assert(status == napi_ok); //如果上层报错,这里失败,导致程序停止
}
上面是一个大概的代码,就是把一个回调引用是1,永远不会释放,因为我没有调用引用减少,所以永远不会释放。
备注
目前觉得小项目用node js 和 python 真的太方便,脚本写上层业务的时候,基本不好用关心语言细节,我发现好多程序员喜欢在意语法细节,我内心觉得好笑,你会用就可以了,你又不是开发语言或者写编译器的(我说那些死转语法的人,不死说不用了解语法)