SuperAPI AI 工具集

interop-promise

通用与其它

查看项目

更新于 10-16 03:11

技能介绍

用途:本技能面向 ArkCompiler 混合运行时,讲解 ETS(ArkTS)Promise 与 JavaScript Promise 的双向透明转换机制,用于开发、理解和调试跨语言异步调用。

主要能力:

  • JS→ETS 路径:JS Promise 经 JSCONVERT_UNWRAP(Promise) 转为 EtsPromise 代理,由 JSConvertPromise::UnwrapImpl() 完成。
  • ETS→JS 路径:EtsPromise 经 JSCONVERT_WRAP(Promise) 转为 JS Promise,EtsPromise 已敲定时走快速路径(napi_resolve_deferred/napi_reject_deferred),仍挂起时走慢路径,通过 PromiseInterop.connectPromise 注册 .then 回调,再由 SettleJsPromise 敲定。
  • 关键类包括 EtsPromise(状态 STATE_PENDING/RESOLVED/REJECTED/LINKED)、EtsPromiseRef 桥接对象、JsJobQueue(CreatePromiseLink 注册 then/catch C++ 回调)。
  • 说明 ETS 的 await 机制:EtsAwaitPromise 先 Schedule 让出 CPU,再按 IsProxy 判断是否等待代理 Promise。
  • 说明回调队列、OnPromiseCompletion 触发、PROMISE_CALLBACK 协程优先级与线程约束。

必要用法:转换并非运行时类型探测触发,而由 .d.ets 编译期类型签名驱动;若声明 Promise<T> 而 JS 返回非 Promise,Debug 下 ASSERT(isPromise) 会失败。SettleJsPromise 必须运行在主 worker 线程。新增可跨 Promise 的互操作类型需实现 JSConvert<YourType>::Wrap() 与 UnwrapImpl() 并注册到 JSRefConvertResolve 查找链。

适用场景:跨语言异步调用调试、卡住 await 排查、类型转换失败分析、新增互操作类型。

限制:官方文档未提供收费、价格与独立安装命令等信息;具体 API 细节以源码为准。