Eckig/RxJs Wann sollte ich mich Abmelden von `Abonnement`

Wann sollte ich mit der Speicherung der Subscription Instanzen und berufen unsubscribe() während der NgOnDestroy Lebenszyklus und Wann kann ich Sie einfach ignorieren?

Speichern Sie alle Abonnements, bringt eine Menge Durcheinander in die Komponente-code.

HTTP-Client-Handbuch ignorieren Abonnements wie diese:

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

In der gleichen Zeit Route & Navigation-Anleitung sagt, dass:

Schließlich, wir werden navigieren woanders. Der router wird diese Komponente entfernen aus DOM und zerstören es. Wir müssen zu reinigen, nachdem uns vor, dass das passiert. Insbesondere müssen wir Abmelden, bevor Eckige zerstört die Bauteile. Andernfalls könnte es einen Speicherverlust.

Wir die Abmeldung aus unserer Observable im ngOnDestroy Methode.

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();
}
Ich denke Subscriptions zu http-requests können ignoriert werden, da Sie nur rufen onNext einmal und dann rufen Sie onComplete. Die Router stattdessen fordert onNext wiederholt und vielleicht nie nennen onComplete (nicht sicher...). Gleiches gilt für Observables aus Events. Also ich denke, diese sollte unsubscribed.
Der stream abgeschlossen (oder nicht abgeschlossen) unabhängig von der Beobachtung, dass die Vollendung. Die Rückrufe (die Beobachter) zur Verfügung gestellt, um die Abo-Funktion nicht feststellen, ob die Ressourcen verteilt werden. Es ist der Aufruf zu subscribe selbst, dass potenziell reserviert Ressourcen im upstream.

InformationsquelleAutor Sergey Tihon | 2016-06-24

Schreibe einen Kommentar