Angular2/4 : Actualisation Des Données En Temps Réel

J'ai besoin d'actualiser les données dans un composant de page dans un intervalle. J'ai aussi besoin d'actualiser les données après avoir fait un peu d'action. Je suis à l'aide de Obeservables dans le service de sorte que je peux souscrire à quand la réponse est prêt. Je suis poussant les abonnements à un objet de façon à ce que je peux dire que sur ngDestroy, je pense, j'ai des méthodes suivantes pour atteindre le même.

Méthode 1 : setInterval

J'ai mis un intervalle sur ngOnInit, qui va appeler le refreshData dans l'égalité de l'intervalle. L'intervalle objet sera effacé à l'aide de clearInterval dans ngOnDestroy méthode.

export class MyComponent implements OnInit, OnDestroy {
    private subscription: Subscription = new Subscription();

    data: any;
    interval: any;

    ngOnInit() {
        this.refreshData();
        this.interval = setInterval(() => { 
            this.refreshData(); 
        }, 5000);
    }

    ngOnDestroy() {
        this.subscription.unsubscribe();
        clearInterval(this.interval);
    }

    refreshData(){
        this.subscription.add(
            this.myService.getData()
                .subscribe(data => {
                    this.data = data;
                })
        );
    }

    doAction(){
        this.subscription.add(
            this.myService.doAction()
                .subscribe(result => {
                    if(result === true){
                        this.refreshData();
                    }
                })
        );
    }
}

Q1 : Sur chaque rafraîchissement appeler un abonnement sera ajouté à la subscription objet, cette augmentation de l'utilisation de la mémoire et de plantage du navigateur, si l'utilisateur maintient la page s'est ouverte pendant un certain temps?

Method2 : Observables.minuterie

Cette méthode est d'utiliser une minuterie qui sera créé après l'actualisation des données.

export class MyComponent implements OnInit, OnDestroy {
    private subscription: Subscription = new Subscription();

    data: any;

    ngOnInit() {
        this.refreshData();
    }

    ngOnDestroy() {
        this.subscription.unsubscribe();
    }

    refreshData(){
        this.subscription.add(
            this.myService.getData()
                .subscribe(data => {
                    this.data = data;
                    this.subscribeToData();
                })
        );
    }

    subscribeToData(){
        this.subscription.add(
            Observable.timer(10000).subscribe(() => this.refreshData())
        );
    }

    doAction(){
        this.subscription.add(
            this.myService.doAction()
                .subscribe(result => {
                    if(result === true){
                        this.refreshData();
                    }
                })
        );
    }
}

Q2 : j'ai la même question(Q1) ici. De cette façon, va ajouter de la minuteries également l'objet d'abonnement, donc enfait les abonnements de l'objet d'abonnement est doublé.

Q3 : Pour actualiser les données après la méthode de l'action - doAction(), le refreshData est appelé. Il en sera de créer une autre chaîne de la minuterie?

Q4 : quelle est la meilleure manière sans fuites de mémoire ou si il existe une autre manière?

InformationsquelleAutor Jithin | 2017-07-06