angular - 为什么这个 Angular Rxjs 观察者不退订?
问题描述
我正在尝试管理内存泄漏。所以要做的一件事就是取消订阅观察者。
我已经遵循了许多关于如何创建观察者的示例,它们都可以工作,但为什么我不能取消订阅这个示例?
https://stackblitz.com/edit/angular-wsuqoy?file=src%2Fapp%2Fapp.component.ts
我花了很多时间在这上面,因为它应该很简单。
谢谢你的帮助。
解决方案
您的代码中有几个问题:
- 您正在尝试
unsubscribe
在 Observable 上调用方法,但应该在 Subscription 实例上调用它:
ts
controllerSubscription: Subscription;
ngOnInit() {
const controllerObserver = this.getObserverIncrements();
this.controllerSubscription = controllerObserver.subscribe((nextVal) => {
this.valueFromSubscriptionNext = nextVal;
});
}
- 您没有清除
unsubscribe
Observable 返回的方法中的间隔
ts
const studentsObservable = new Observable(observer => {
const firstInterval = setInterval(() => {
observer.next(this.noReasonIncrement);
}, 8000);
const secondInterval = setInterval(() => {
this.noReasonIncrement++;
}, 1000);
return {unsubscribe() {
clearInterval(firstInterval);
clearInterval(secondInterval);
}};
});
推荐阅读
- mongodb - 聚合:嵌套文档中的分组日期(嵌套对象)
- excel - 带有 if/and/or 语句的 For 循环
- java - Spring data - 具有相同标识符的不同对象,即使对象相等
- python - Pygame 'pygame.Surface' 对象不可调用
- node.js - 将 8kHz mulaw 转换为 PCM 16kHz
- python - 为什么当我做子图时窗口正在切割我的桌子?
- python - PYTHON:带有本地文件夹文件调用的导入模块=错误
- javascript - 谷歌地图多个和重叠的复选框
- java - 在 Java 中的每个循环结束时等待?
- docker - 在 $PATH 中找不到 docker-compose up 错误可执行文件,试图了解 docker