这个问题在So上并不 fresh ,但我有一个与其他问题不完全相同的情景.
比方说我有一个班级Component
class Component {
constructor() {
this.resolvers = [];
}
addResolver() {
return new Promise((resolve) => {
this.resolvers.push(resolve);
});
}
callResolvers() {
this.resolvers.forEach((resolver) => resolver());
}
}
然后我就有了这段代码
let components = [];
async function addComponent() {
const component = new Component();
components.push(component);
await component.addResolver();
console.log("resolver called");
}
function deleteComponents() {
components = [];
}
function resolveComponents() {
components.forEach((component) => component.callResolvers());
}
addComponent();
addComponent();
addComponent();
resolveComponents();
如果我拨打resolveComponents()
,就会调用解析器.
我担心的是,如果我不是打resolveComponents()
,而是打deleteComponents()
,就像这样:
addComponent();
addComponent();
addComponent();
deleteComponents();
这些部件会被垃圾收集吗?
他们有未兑现的promise ,这些promise 的解决器存储在component.resolvers
.
由于之前的组件在删除后将不可能到达,我猜测即使它们有未兑现的promise ,它们也将被收集.
这个问题的答案是什么?