渐进式编程课
鸿蒙 目录
第 52 课2026.09.14

验证一次释放失败后,下一次关闭仍能重新调用底层释放。

第 52 课:关闭失败后的重试契约

  • 日期:2026-09-14
  • 课程序号:第 52 课
  • 知识点:失败状态复位与顺序重试

用途

验证一次释放失败后,下一次关闭仍能重新调用底层释放。

核心概念

失败的共享 Promise 不能永久缓存;捕获失败并清空进行中任务,才能让后续调用重试。

最小代码或操作示例

ts
let count: number = 0
const handle: Handle = new Handle(async (): Promise<void> => {
  count += 1
  if (count === 1) { throw new Error("fail") }
})
let failed: boolean = false
try { await handle.close() } catch { failed = true }
if (!failed) { throw new Error('第一次关闭应失败') }
await handle.close()
if (count !== 2) { throw new Error('应执行两次底层释放') }

3~5 分钟练习

第三次调用 close(),断言底层释放次数。

参考答案

成功后状态应保持关闭,第三次调用后 count 仍为 2。

与上一课的联系

上一课验证并发关闭成功后的幂等;本课补足失败后的顺序重试路径。

时效校验

时效校验:2026-09-24(华为 Promise 异步操作官方资料;本机 HarmonyOS 26.0.0/API 26 SDK)。去除未定义的 expectReject 测试辅助函数,失败后清理与顺序重试写法未使用废弃接口。

官方参考