【发布时间】:2019-12-23 10:51:59
【问题描述】:
我正在尝试管理内存泄漏。所以要做的一件事就是取消订阅观察者。
我已经学习了很多关于如何创建观察者的示例,它们都可以工作,但为什么我不能取消订阅这个示例?
https://stackblitz.com/edit/angular-wsuqoy?file=src%2Fapp%2Fapp.component.ts
我花了很多时间在这上面,因为它应该很简单。
感谢您的帮助。
【问题讨论】:
我正在尝试管理内存泄漏。所以要做的一件事就是取消订阅观察者。
我已经学习了很多关于如何创建观察者的示例,它们都可以工作,但为什么我不能取消订阅这个示例?
https://stackblitz.com/edit/angular-wsuqoy?file=src%2Fapp%2Fapp.component.ts
我花了很多时间在这上面,因为它应该很简单。
感谢您的帮助。
【问题讨论】:
您的代码中有几个问题:
unsubscribe 方法,但应该在 Subscription 实例上调用它:ts
controllerSubscription: Subscription;
ngOnInit() {
const controllerObserver = this.getObserverIncrements();
this.controllerSubscription = controllerObserver.subscribe((nextVal) => {
this.valueFromSubscriptionNext = nextVal;
});
}
unsubscribe 方法中的间隔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);
}};
});
【讨论】: