如果在鸿蒙应用开发中,想在 Native 侧调用 ArkTS 侧异步方法,并获取异步计算结果到 Native 侧,应该怎么实现?

我在进行鸿蒙应用开发,目前有个需求是在 Native 侧调用 ArkTS 侧的异步方法,并且要把异步计算的结果获取到 Native 侧来,我知道这可能有一定难度,也不清楚具体要从哪些方面着手,希望能详细介绍下实现的步骤和可能遇到的问题。

阅读 753
1 个回答

该场景诉求可以通过在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...

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