我有一个角度组件,在 ngOnDestroy 钩子内部,我想添加异步函数,使 http 调用可以删除某些内容。我想知道内存是如何管理的以及回调函数的范围是什么?如果垃圾收集器决定通过引用释放内存是否意味着该组件将保留在内存中直到删除回调完成?这是stackblitz 演示和我正在测试的示例。
第一的:
ngOnDestroy() {
this.http.delete(...)
}
Run Code Online (Sandbox Code Playgroud)
由于我没有提供 .then(...) 回调,这是否意味着组件可以从内存中完全卸载?
第二:
async ngOnDestroy() {
await this.http.delete(...)
}
Run Code Online (Sandbox Code Playgroud)
为什么组件会被销毁并且不等待 delete() 完成?
第三:
ngOnDestroy() {
this.http.delete(...).then(console.log);
}
Run Code Online (Sandbox Code Playgroud)
由于我提供了回调函数,这是否意味着组件将保留在内存中直到回调函数完成?
我怎样才能看到内存分配中发生了什么?有没有办法查看垃圾收集器的作用,或者在从内存中释放某个对象时指定回调函数?谢谢
编辑
根据这篇内存管理 MDN 文章,自 2012 年以来,引用计数算法已被标记和清除所取代,如果我使用 --expose-gc 标志运行我的 ng 服务节点进程,我可以暴露垃圾收集器
我已通读 文档并使用 VS Code 扩展创建了一个新的 azure 函数,仅使用它吐出的样板代码。
然后我在 local.settings.json 中进行本地设置(我在 Windows 上)
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "",
"FUNCTIONS_WORKER_RUNTIME": "node",
"FUNCTIONS_EXTENSION_VERSION": "~4",
"WEBSITE_NODE_DEFAULT_VERSION": "~16"
}
}
Run Code Online (Sandbox Code Playgroud)
但我仍然得到节点版本不兼容的错误。
我有这个表格:
public profileSettingsGroup = new FormGroup({
firstName: new FormControl('Jonathon', Validators.required)
})
Run Code Online (Sandbox Code Playgroud)
我有这个方法:
setControlValue(control: string, value: string){
this.profileSettingsGroup.patchValue({
control: value
});
}
Run Code Online (Sandbox Code Playgroud)
我有这张地图:
for (let control in this.profileSettingsGroup.controls) {
this.map.set(control, this.camelCase(control));
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试通过变量更新表单中的控件,但 angular 似乎不允许我动态命名表单控件。它以control实际控件命名:“控件”。我可以在 angular 中做我想做的事吗?