第 53 课2026.09.15
让调用方判断资源是否已经成功关闭,同时不获得修改内部状态的权限。
第 53 课:关闭状态只读查询
- 日期:2026-09-15
- 课程序号:第 53 课
- 知识点:资源状态的只读可观察性
用途
让调用方判断资源是否已经成功关闭,同时不获得修改内部状态的权限。
核心概念
closed 仍由 Handle 单独维护;只读 getter 只暴露结果,不复制或伪造业务事实。失败后的重试仍由上一课的 close() 契约负责。
最小代码或操作示例
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
}
isClosed(): boolean {
return this.closed
}
}3~5 分钟练习
在一次关闭失败和一次重试成功后,分别断言 isClosed() 的结果。
参考答案
失败后应为 false;重试成功并写入 closed = true 后应为 true。
与上一课的联系
继承上一课失败后可重试的 Handle.close();本课只增加只读状态查询;下一课可让 UI 根据该事实禁用关闭按钮。
时效校验
时效校验:2026-09-24(华为 Promise 异步操作官方资料;本机 HarmonyOS 26.0.0/API 26 SDK)。保留第 50 课的 close() 与构造参数,仅新增 isClosed();未使用废弃接口、any、unknown 或旧全局路由。