HarmonyOS NDK调用JS function回调时,JS打印数据错误 ?

在JS层传入一个回调到NDK, 通过 napi_create_threadsafe_function 创建了线程安全函数对象进行维护,在使用自有库进行日志回调时, 通过 napi_call_threadsafe_function 创建任务到JS主线程。在JS主线程回调Callback的时候,出现了NDK回调前数据打印正常,回调后在JS层打印错误。
// JS API
export const setBaseLogCallback: (cbFn: (level: number, file:string, line:number, func:string, data:string) => void) => void;
static void callTSBaseLog(napi_env env, napi_value jsCb, [[maybe_unused]] void context, void data) {
// 已经在JS线程
CallbackContext ctx= (CallbackContext) context;
LogCtx log = (LogCtx )data;
OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "callTSBaseLog",

"NDK base NDK-[%{public}s(%{public}s)]: %{public}s\n", log->file.c_str(), log->func.c_str(), log->data.c_str()); 

napi_value callArg[5] = {nullptr};
napi_create_int32(baseLogContext.env, log->logLevel , &callArg[0]);
napi_create_int32(baseLogContext.env, log->line, &callArg[2]);
napi_create_string_utf8(baseLogContext.env, log->file.c_str(), log->file.size(), &callArg[1]);
napi_create_string_utf8(baseLogContext.env, log->func.c_str(), log->func.size(), &callArg[3]);
napi_create_string_utf8(baseLogContext.env, log->data.c_str(), log->data.size(), &callArg[4]);
napi_call_function(ctx->env, nullptr, jsCb, 5, callArg, nullptr);
delete log;
}

阅读 638
1 个回答

sourceMaps:build/default/cache/default/default@CompileArkTS/esmodule/release/sourceMaps.json

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题