如何解决我如何知道是否有对给定实例的任何引用?
我正在构建一个队列,如果没有对该队列实例的引用,我想避免执行任何任务。
我已经用 WeakRef
尝试过一些东西,但可能永远不会奏效。
const queue = () => {
const enqueue = () => {
console.log("enqueue");
setTimeout(() => {
if (instanceRef.deref()) {
console.log("the queue is still referenced so perform task");
}
});
};
const instance = { enqueue };
const instanceRef = new WeakRef(instance);
return instance;
};
b = queue();
b.enqueue();
b = null;
console.log("b is set to null so there are no references to the instance");
如果队列仍然存在但不太优雅,另一种方法是检查任务。
解决方法
不能依靠 WeakRef#deref()
来知道是否仍然存在对目标对象的(强)引用。它仅指示垃圾收集器是否已销毁对象并回收其内存。这可能会发生得更晚,也可能根本不会发生。
你想要的东西有点奇怪。您想通过将 null 分配给先前已启动超时功能的变量来神奇地停止超时功能。
您更想要的是有一种停止超时功能的方法。调用 setTimeout
会返回一个处理程序。存储此处理程序并调用内置方法
clearTimeout(handler)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。