第 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 测试辅助函数,失败后清理与顺序重试写法未使用废弃接口。