第 49 课2026.09.09
让并发关闭只复用进行中的任务,并在释放完成后清理临时状态。
第 49 课:释放完成后清理并发标记
- 日期:2026-09-09
- 课程序号:第 49 课
- 知识点:Promise.finally 与生命周期状态
用途
让并发关闭只复用进行中的任务,并在释放完成后清理临时状态。
核心概念
finally 无论 Promise 成功或失败都会执行;清理进行中标记后,后续生命周期操作不会误拿已经结束的任务。
最小代码或操作示例
ts
class Handle {
private closing?: Promise<void>
close(): Promise<void> {
if (this.closing) {
return this.closing
}
this.closing = this.release().finally((): void => {
this.closing = undefined
})
return this.closing
}
private async release(): Promise<void> {
await Promise.resolve()
}
}3~5 分钟练习
让 release() 第一次抛错,捕获后再次调用 close(),观察是否创建新的 Promise。
参考答案
第一次结束时 finally 已清空 closing,第二次调用会重新执行 release()。
与上一课的联系
上一课让并发调用共享同一次释放;本课补齐该共享状态在任务结束后的生命周期。