我在进行鸿蒙应用开发,目前有个需求是在 Native 侧调用 ArkTS 侧的异步方法,并且要把异步计算的结果获取到 Native 侧来,我知道这可能有一定难度,也不清楚具体要从哪些方面着手,希望能详细介绍下实现的步骤和可能遇到的问题。
我在进行鸿蒙应用开发,目前有个需求是在 Native 侧调用 ArkTS 侧的异步方法,并且要把异步计算的结果获取到 Native 侧来,我知道这可能有一定难度,也不清楚具体要从哪些方面着手,希望能详细介绍下实现的步骤和可能遇到的问题。
1 回答560 阅读✓ 已解决
1 回答662 阅读
1 回答568 阅读
1 回答515 阅读
1 回答537 阅读
1 回答464 阅读
531 阅读
该场景诉求可以通过在Native侧获取ArkTS侧Promise对象来实现。具体步骤如下:
ArkTS侧实现:
a. 调用Native接口时,传入callback回调。在该回调中通过构造函数创建Promise对象;
b. 在Promise构造函数的参数回调中,实现异步操作,并根据操作结果,调用resolve或者reject接口,用以对Promise对象进行状态迁移。
Native侧实现:
a. 定义Promise对象then属性的回调方法,用以处理ArkTS侧异步计算结果;
b. 定义Promise对象catch属性的回调方法,用以处理ArkTS侧异步计算异常信息;
c. 在Native接口实现中,通过napi_call_function接口执行ArkTS侧传入的callback回调,获取Promise对象;
d. 通过napi_get_named_property接口获取Promise对象中的then和catch属性;
e. 通过napi_create_function接口将上述定义的then和catch属性C++回调方法转换为ArkTS函数对象;
f. 通过napi_call_function接口执行then和catch属性对应ArkTS函数对象,用以处理ArkTS侧的异步计算结果和异常信息。类似于在ArkTS侧调用promise.then(()=>{}和promise.catch(()=>{}。
具体实现参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V...