Angulaire/RxJs Quand dois-je me désinscrire "Abonnement"

Quand dois-je stocker les Subscription instances et invoquer unsubscribe() au cours de la NgOnDestroy cycle de vie et quand puis-je tout simplement les ignorer?

De la sauvegarde de tous les abonnements introduit beaucoup de gâchis dans le code du composant.

HTTP le Guide du Client ignorer les abonnements comme ceci:

getHeroes() {
  this.heroService.getHeroes()
                   .subscribe(
                     heroes => this.heroes = heroes,
                     error =>  this.errorMessage = <any>error);
}

Dans le même temps Itinéraire & Guide de Navigation dit que:

Finalement, nous allons naviguer ailleurs. Le routeur va supprimer cette composante dans les DOM et les détruire. Nous devons nettoyer derrière nous avant que cela arrive. Plus précisément, nous nous devons de vous désabonner avant Angulaire détruit le composant. Ne pas le faire pourrait créer une fuite de mémoire.

Nous vous désinscrire de notre Observable dans le ngOnDestroy méthode.

private sub: any;

ngOnInit() {
  this.sub = this.route.params.subscribe(params => {
     let id = +params['id']; //(+) converts string 'id' to a number
     this.service.getHero(id).then(hero => this.hero = hero);
   });
}

ngOnDestroy() {
  this.sub.unsubscribe();
}
  • Je suppose que Subscriptions à http-requests peut être ignoré, car elle ne fait appel onNext une fois et puis ils appellent onComplete. Le Router au lieu des appels onNext à plusieurs reprises, et pourraient ne jamais l'appeler onComplete (pas sûr...). En va de même pour Observables de Events. Donc je suppose que ceux-ci devraient être unsubscribed.
  • Le flux est terminée (ou ne pas remplir), indépendamment de toute observation de la réalisation. Les rappels (l'observateur) fourni à la souscription de la fonction ne permettent pas de déterminer si les ressources sont allouées. C'est l'appel à subscribe lui-même qui, potentiellement, de l'allocation des ressources en amont.
InformationsquelleAutor Sergey Tihon | 2016-06-24