HarmonyOS 鸿蒙Next中Remote Communication Kit定制数据传输文档带啊吗存在Bug

HarmonyOS 鸿蒙Next中Remote Communication Kit定制数据传输文档带啊吗存在Bug 【问题描述】:定制数据传输文档的retryRequest异步函数中,递归调用自身时未处理返回值,导致异步链路断链。同时,使用new Promise嵌套递归会导致内存堆栈风险和逻辑冗余。

【问题现象】:Promise状态悬挂: 当第一次请求失败进入重试逻辑后,由于retryRequest(url, retryCount, attempt + 1) 前缺少return或未将其结果通过resolve/reject传递给外层Promise,导致最外层的调用方永远无法接收到重试成功或失败的结果,程序流程卡死。

cke_7434.png

重试机制失效: 开发者在外部调用时,即便后续重试成功,也拿不到rcp.Response对象。

【版本信息】:不涉及,此处为基础语法问题

【复现代码】:定制数据传输文档超时重试模块的第三步


更多关于HarmonyOS 鸿蒙Next中Remote Communication Kit定制数据传输文档带啊吗存在Bug的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

尊敬的开发者,您好!感谢您的反馈,问题正在加速处理中,还请关注后续版本,感谢您的理解与支持。

更多关于HarmonyOS 鸿蒙Next中Remote Communication Kit定制数据传输文档带啊吗存在Bug的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


尊敬的开发者您好,感谢您的关注,可以提交工单反馈。

Remote Communication Kit 在鸿蒙 Next 中,定制数据传输接口的文档描述与实际行为存在偏差(如参数类型或回调触发时机不一致),但并非普遍性 Bug。具体需核对 SDK 版本与文档版本的对应关系。

文档示例代码中 retryRequest 函数存在 Promise 链断裂问题:在 catch 里递归调用自身时未将返回的 Promise 链接到外层,导致外部调用永远无法获取重试结果。

问题代码片段:

.catch(err => {
  if (attempt < retryCount) {
    retryRequest(url, retryCount, attempt + 1);  // 未 return 或 resolve
  } else {
    reject(err);
  }
});

修复方法: 在递归调用前添加 return,并将其结果传递给外层 Promise:

.catch(err => {
  if (attempt < retryCount) {
    return retryRequest(url, retryCount, attempt + 1).then(resolve, reject);
  }
  reject(err);
});

或使用 resolve(retryRequest(...)) 直接包裹。这样外部 await retryRequest() 才能正确拿到重试成功后的响应对象,避免状态悬挂。

回到顶部