2016-10-13 27 views
1

当服务被破坏时,我们是否需要取消订阅服务?Angular2:当服务被破坏时,我们需要取消订阅吗?

基于destroy事件,正在侦听此服务的其他组件可以取消其订阅。我只是不明白为什么这么做很重要。

这是一个很好的做法,还是一个性能目的的必要性?

+0

难道你没有得到答案这个http://stackoverflow.com/q/35042929/744534 – Thaadikkaaran

回答

4

是的,你这样做,因为这样的东西可能会导致内存泄漏。这是一个很好的做法,清理自己后,以确保您不会像过去一样遇到大问题,特别是在Angular 1中。

在您的订阅相当直接后清理:

import {Subscription} from 'rxjs/Subscription'; 

在你的类:

public configSubscription: Subscription; 

内部构造或ngOnInit或其他合适的地方:

this.configSubscription = this.api.config$.subscribe(
    config => { 
    this.config = config; 
}); 

然后用此清理:

ngOnDestroy() { 
    this.configSubscription.unsubscribe(); 
} 
+0

它的工作原理相同与.toPromise(),然后(。 )? – Scipion

+2

@Scipion在这种情况下,我不认为你需要担心。一旦您投入承诺,一旦承诺解决/拒绝,基础Observable就会完成。这是因为根据定义,承诺只会发出一个单一的值,所以他们的资源不会像Obserbles一样流连忘返。 PS:也许有人可以在这里权衡,但有一个边缘情况:如果你的承诺需要永远解决B/C源Observable不发射,那个资源仍然活着。在这种情况下,你可能需要解决它,但是我仍然没有看到memleak的危险,除非你持续跨越承诺 – BeetleJuice

+0

好东西,干杯队友 – Scipion

相关问题