8.7 已发布——WinterCG 合规性 第 1 部分
了解更多信息

你刚错过了这班车! ...应对时间。

有时,setTimeoutsetInterval可能是应用程序的生命周期中未经检查的最令人害怕的项目。

一个未做保护或未控制好的超时的单例可能会导致灾难性的应用崩溃。例如,试想当用户导航到一个视图时,围绕视图实例启动一个动画的超时...但是用户早早地从该视图导航出去。没有停止超时,对已被清理和销毁的视图实例的无效访问可能会崩溃你的应用,而且一定会发生。

强烈建议跟踪你的超时和间隔,并在不再需要时正确地清理它们。

ts
this.myTimeout = setTimeout(() => {
  // something
}, 2000);

cleanup() {
  if (typeof this.myTimeout === 'number') {
    clearTimeout(this.myTimeout);
    this.myTimeout = null;
  }
}

间隔是最糟糕的情况,因为它们可能会永远地吞噬你的应用试图提供良好用户体验的宝贵设备资源。在最讨厌的情况下,它们会加倍进行,并继续侵蚀应用的 UX。

ts
this.myInterval = setInterval(() => {
  // something
}, 2000);

cleanup() {
  if (typeof this.myInterval === 'number') {
    clearInterval(this.myInterval);
    this.myInterval = null;
  }
}
下一步
简介