HarmonyOS 鸿蒙Next napi_resolve_deferred多线程调用闪退

发布于 1周前 作者 sinazl 来自 鸿蒙OS

HarmonyOS 鸿蒙Next napi_resolve_deferred多线程调用闪退

收到js侧调用,创建了一个Promise,并保存了起来。

napi_value result = nullptr;
napi_deferred deferred = nullptr;
napi_create_promise(env, &deferred, &result);

因为业务关系,起了个线程,处理完成之后,回调Promise,app闪退了

// App闪退
napi_value result = nullptr;
napi_create_int32(env_, 0, &result);
napi_resolve_deferred(env_, deferred_, result);

报错信息:ecma_vm cannot run in multi-thread! thread:19037 currentThread:19129

这可咋整。


更多关于HarmonyOS 鸿蒙Next napi_resolve_deferred多线程调用闪退的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

该错误是由于回调函数必须运行在js的主线程中,其他线程发起调用会抛出该异常。,如果需要从C++线程回调ArkTS接口,建议参考下面的指导

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/use-uv-queue-work-0000001813575928-V5

更多关于HarmonyOS 鸿蒙Next napi_resolve_deferred多线程调用闪退的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


HarmonyOS 鸿蒙系统中,napi_resolve_deferred 的多线程调用闪退问题可能源于 Node.js N-API 的使用不当或线程安全问题。确保 napi_resolve_deferred 仅在创建它的同一线程中被调用是关键。如果需要在多线程环境中处理异步操作,建议使用线程安全的消息传递机制(如事件循环的 postTask)来在正确的线程上触发回调。

此外,检查所有相关的 Native 模块和库是否已正确配置以支持多线程操作。如果问题依旧没法解决请加我微信,我的微信是itying888。

更多关于HarmonyOS 鸿蒙Next napi_resolve_deferred多线程调用闪退的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


回到顶部