在我的电子应用程序中,我使用 Node-addon 创建一个窗口,我想在窗口大小发生变化时调用一个 js 函数。
首先我尝试使用自定义的异步回调,但它不起作用,登录js的回调函数没有打印。我不知道是我的问题还是异步回调无法处理它。
然后我使用异步线程安全函数。当我使用 call_js_cb 参数创建它时无法调用 JS 回调。我在 call_js_cb 中调用 JS 回调,但它返回 napi_invalid_args。详细信息显示在下面的代码中。
void onWindowEventForJS(napi_env env,napi_value js_callback,void* context,void* data) {
napi_status status;
napi_value param;
napi_value ret;
status = napi_create_int32(env, 10, ¶m);//napi_ok,
status = napi_call_function(env, nullptr, js_callback,1,param, &ret);
//status is napi_invalid_args
//js_callback type is function,env can create an int value.I don't know which arg was wrong.
//my guess is that js_callback exists in a different env.
}
void NativeWindow::setSizeChangeCallback(napi_env env, napi_callback_info info)
{
napi_status status;
napi_value params[2];
size_t argc = 2;
status = napi_get_cb_info(env, info, &argc, params, NULL, NULL);
_asyncResource = params[0];
_sizeChangeCallback = params[1];
napi_value name;
napi_create_string_utf8(env, "native2", NAPI_AUTO_LENGTH, &name);
status = napi_create_threadsafe_function(env, params[1], _asyncResource, name,0,1,nullptr, nullptr,this, onWindowEventForJS,&_safe_callback);
}
有线的事情是,当我使用nullptr替换onWindowEventForJS时,可以调用JS回调。但是我需要将参数传递给JS回调。
有人帮忙~~~