第 50 课2026.09.10
避免成功释放后再次执行底层释放。
第 50 课:关闭成功后保持已释放状态
- 日期:2026-09-10
- 课程序号:第 50 课
- 知识点:释放状态与并发任务分离
用途
避免成功释放后再次执行底层释放。
核心概念
进行中的 Promise 只负责并发复用;成功标记负责后续幂等返回,失败时不写成功标记。
最小代码或操作示例
ts
class Handle {
private closing?: Promise<void>
private closed: boolean = false
private releaseFn: () => Promise<void>
constructor(releaseFn: () => Promise<void>) { this.releaseFn = releaseFn }
close(): Promise<void> {
if (this.closed) return Promise.resolve()
if (this.closing) return this.closing
this.closing = this.releaseFn().then((): void => { this.closed = true })
.finally((): void => { this.closing = undefined })
return this.closing
}
}3~5 分钟练习
连续两次等待 close(),记录传入的 releaseFn 调用次数。
参考答案
成功后第二次直接返回,只调用一次 releaseFn。
与上一课的联系
沿用上一课的并发任务引用及完成后清理逻辑;本课只增加成功释放事实,并将已有释放操作作为构造参数传入,便于下一课计数验证。
时效校验
时效校验:2026-09-24(华为 Promise 异步操作官方资料;本机 HarmonyOS 26.0.0/API 26 SDK)。Promise、then、finally 为当前 ArkTS 标准用法;本课未调用废弃接口。