javascript - 如果从 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 服务节点进程,我可以公开垃圾收集器
解决方案
推荐阅读
- c++ - GCC 构建在 OSX 10.14.1 上失败,出现“格式错误的对象(未知加载命令 1)”
- mysql - 如何检查 Oracle MySQL 中的存储过程 if-block 中是否存在行
- reactjs - React - 测试卡组件(Ant Design)
- ios - 拒绝 JS Geolocation 请求后,用户如何重置权限设置?(iOS Safari)
- android - 找不到 com.android.tools.lint:lint-gradle:26.1.4
- java - 如果字段实现了该接口,如何实现该接口
- c++ - 从二进制文件中读取结构并插入向量/STL::list 然后返回它
- python - 熊猫数据框忽略列值左侧的零
- azure - 使用 Azure 服务的架构服务器-客户端
- mvvmcross - 单元测试 MxvAsyncCommand 时的 MVVM 交叉空引用