RxJS .subscribe()无参数调用是否仍会导致内存泄漏?
关于RxJS interval订阅无观察者是否内存泄漏的解答
会,这种情况依然会引发内存泄漏。
原因很直白:
- 不管
subscribe()方法是否传入观察者(包括完全不传参数),RxJS的interval操作符在被订阅后,都会启动一个持续运行的定时任务(浏览器环境对应setInterval,Node.js环境则是类似的定时器实现)。 - 同时,RxJS内部会创建一个默认的空订阅对象来维护这个订阅关系,只要没有主动调用
subscription.unsubscribe()取消订阅,这个定时任务就会一直执行,对应的订阅对象也会一直被保留在内存中,无法被垃圾回收机制清理。 - 本质上,传不传观察者只影响是否有逻辑响应定时输出,并不会改变
interval订阅后启动定时器、持有订阅引用的核心行为。
你可以做个直观验证:在浏览器开发者工具的内存面板中,执行const sub = interval(100).subscribe()后不调用sub.unsubscribe(),间隔一段时间拍摄内存快照,会发现Subscription实例以及关联的定时器引用始终存在,不会被回收。
内容的提问来源于stack exchange,提问作者user19776366
相关产品推荐
相关产品推荐

