Svelte中Readable.subscribe的第二个invalidate参数是什么?
关于Svelte Readable Store的「invalidate cleanup callback」详解
核心作用
这个回调函数是readable store的start函数的返回值,当store的最后一个订阅者取消订阅时自动触发,用来清理start阶段创建的各类资源,避免内存泄漏。
简单示例
比如我们创建一个每秒更新时间的readable store,在start里启动定时器,清理回调负责关闭定时器:
import { readable } from 'svelte/store'; const currentTime = readable(new Date(), (set) => { // start阶段:启动定时器,每秒更新时间 const timer = setInterval(() => { set(new Date()); }, 1000); // 返回的就是invalidate cleanup callback return () => { clearInterval(timer); // 清理定时器 console.log('定时器已清除,资源释放'); }; });
当页面中所有订阅currentTime的组件都被销毁(或者主动取消订阅),这个清理回调就会执行,把定时器关掉,不会让它在后台继续运行浪费资源。
常见使用场景
- 清理定时器/间隔任务
- 移除DOM事件监听(比如
window.resize) - 关闭WebSocket连接或者取消API请求
- 释放其他会持续占用内存的资源
内容的提问来源于stack exchange,提问作者Sámal Rasmussen
相关产品推荐
相关产品推荐

