2017-10-19 16 views
-2

Hows préférable de se désinscrire d'une observable en utilisant un takeUntil. D'après ce que je comprends, takeUntil fait automatiquement le complet pour vous.Hows préférable de se désinscrire d'une observable en utilisant un takeUntil en Angular2

Voici comment je me désabonne normalement d'une observable. Mais je ne sais pas si c'est fait correctement. Ai-je vraiment besoin du "this.destroyed $ .complete();" si takeUntil fait le complet pour moi?

Ceci est ma tentative actuelle qui fonctionne, mais pas sûr si meilleure méthode:

private destroyed$: Subject<void> = new Subject(); 

ngOnIt(): void { 
    this.serviceA.getData 
     .takeUntil(this.$destroyed) 
     .subscribe(val => { 
     console.log('Current value:', val); 
     }); 
    }; 

    ngOnDestroy(): void { 
    this.destroyed$.next(); 
    this.destroyed$.complete(); 
    }; 

Je pensais à enlever le .complete dans le ngOnDestory mais pas sûr si cela causerait des fuites de mémoire?

+2

avez-vous vérifier ce lien: https://stackoverflow.com/questions/38008334/angular-rxjs-quand-devrais-je-désinscrire-de-l'abonnement? * – Wandrille

+0

Ce lien a beaucoup d'exemples et je veux juste une réponse vraiment pour si je le fais bien? Merci pour ce lien si – AngularM

+1

Il suffit de lire la réponse de validation: --- Edit 3 - La solution 'officielle' (2017/04/09). C'est le meilleur moyen, validé par un membre de l'équipe d'Angular – Wandrille

Répondre

1

Personnellement je préfère cette solution, ont un autre sujet juste pour gérer désabonnement et mélanger avec takeUntil probablement faire des choses trop complexes

private _subscriptions:Subscription[]; 

ngOnIt(): void { 
    this._subscriptions.push(this.serviceA.getData 
    .subscribe(val => { 
    console.log('Current value:', val); 
    }) 
    ) 
}; 

ngOnDestroy(): void { 
this._subscriptions.foreach(subs=>{ subs.unsubscribe()}) 
}; 
+0

Je préfère ma solution. Mais @Fan il serait bon de savoir si le vôtre fonctionne vraiment car il manque un complet() – AngularM

+0

L'objectif est de tout désinscrire sur NgDestroy, l'oncomplete est l'objet complet détruit dans votre approche de sorte qu'il n'est pas tout à fait lié. –