资讯详情

资讯详情

ArkTS 脚本执行完为什么调用方没结果:requestCode、URI 授权与 completeArkTSScriptInApp

ArkTS 脚本执行完为什么调用方没结果requestCode、URI 授权与 completeArkTSScriptInApp应用脚本已经生成文件并打印“成功”调用方却一直等待结果。排查后发现脚本把业务任务 ID 当成了requestCode完成时又在两个异常分支各调用一次上报。scriptManager的结果回传本质上是一份请求协议必须关联系统传入的 requestCode并且只完成一次。验证范围本文依据华为开发者官网截至 2026-09-22 的公开资料整理。当前本机 DevEco SDK 为 API 24且没有连接 HDC 真机涉及 API 26 的接口片段用于说明接入与排障边界不宣称已经完成 API 26 编译或真机验证。文中的时间戳校验、状态机、坐标换算、去重合并与资源预算逻辑已通过 Node.js 宿主测试正式上线仍需在 API 26 SDK 和目标设备上补齐编译、权限、异常分支与性能验收。能力边界先画清楚API 26 的ArkTSScriptInfo包含系统提供的requestCode和绑定 Ability 的上下文。业务可以有自己的 taskId但不能替代 requestCode。返回文件时还要通过uris与flags明确授权不能只把沙箱路径塞进普通字符串也不应为了省事授予读写双权限。输入中间状态可交付结果ArkTSScriptInfo提取 requestCode 与 context本次系统请求上下文业务执行使用独立 taskId 管理幂等成功或结构化失败ExecuteResultcode、result、uris、flags最小权限结果completeArkTSScriptInApp一次性完成调用方收到终态案例一导出报告成功但调用方拿不到文件结果对象里只返回了/data/storage/.../report.pdf字符串。这个路径属于应用沙箱调用方不能据此访问。应把允许共享的 URI 放入uris并只授予读取所需的 flag完成后按产品策略清理临时文件。interfaceCompletionGate{completed:boolean;requestCode:string}functionbeginComplete(gate:CompletionGate,requestCode:string):boolean{if(gate.completed||gate.requestCode!requestCode)returnfalse;gate.completedtrue;returntrue;}案例二超时与成功回调同时到达网络任务在超时处理后又返回成功。如果两个分支都调用完成接口调用方会收到不确定行为。让所有出口先竞争同一个完成门禁只有第一个终态可以构造ExecuteResult其余回调只记录并释放资源。typeScriptResult{code:number;result?:Recordstring,Object;uris?:string[];flags?:number};functionfailure(code:number,message:string):ScriptResult{return{code,result:{message}};}取舍不是“开或不开”把 requestCode 当作系统协议标识把 taskId 当作业务幂等标识两者分开管理。文件授权按结果逐个给最小权限所有异步出口汇入一个完成门禁。交付前检查脚本在 module.json5 中绑定正确 Ability。只使用系统传入的 requestCode 完成当前请求。成功、失败、超时和取消只允许一个终态。文件通过 URI 与最小 flags 授权不暴露沙箱路径。日志不记录完整 URI、用户内容或敏感结果。官方资料scriptManager APIHarmonyOS 26.0.0 版本说明脚本“执行完”只是内部事实调用方“收到且能使用结果”才是协议完成。requestCode、一次终态和 URI 权限缺一不可。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →