首页 > 解决方案 > 如果从 ngOnDestroy 生命周期钩子中调用异步函数,如何收集组件垃圾?

问题描述

我有一个角度组件,在 ngOnDestroy 钩子中,我想添加异步函数,例如调用 http 来删除某些东西。我想知道内存是如何管理的,回调函数的范围是什么?如果垃圾收集器决定通过引用释放内存是否意味着组件将保留在内存中直到删除回调完成?这是一个stackblitz 演示和我正在测试的示例。

第一的:

 ngOnDestroy() {
    this.http.delete(...)
  }

由于我没有提供 .then(...) 回调,这是否意味着组件可以完全从内存中卸载?

第二:

 async ngOnDestroy() {
    await this.http.delete(...)
  }

为什么组件被破坏并且不等待 delete() 完成?

第三:

 ngOnDestroy() {
    this.http.delete(...).then(console.log);
  }

由于我提供了回调函数,这是否意味着组件将保留在内存中,直到回调函数完成?

我怎样才能看到内存分配中发生了什么?当某个对象从内存中释放时,有没有办法查看垃圾收集器的作用或指定回调函数?谢谢

编辑

根据这篇内存管理 MDN 文章,似乎自 2012 年以来,引用计数算法已被标记并清除,如果我使用 --expose-gc 标志运行我的 ng 服务节点进程,我可以公开垃圾收集器

标签: javascriptangularasync-await

解决方案


推荐阅读