J'implémente les fonctions suivantes dans le composant Angular2:
export class MypageEditComponent {
ngOnInit() {
this.timer = Observable.timer(100, 100);
this.timer.subscribe(t => {
this.setFormData();
}
private setFormData() {
this.editUserAcountType = this.authStore.registerInfo.account_type;
this.editAddress = this.authStore.registerInfo.email;
this.editUserName = this.authStore.registerInfo.username;
}
}
Je veux arrêter la répétition de Observable.timer
Une fois que la valeur est correctement stockée avec setFormData()
.
Mais ne sais pas comment, dites-moi s'il vous plaît.
Il y a fondamentalement deux manières:
unsubscribe()
sur l'objet d'abonnement renvoyé par l'appel subscribe()
.Pour que unsubscribe
vous puissiez le faire comme ceci.
ngOnInit() {
this.subscription = timer(100, 100).subscribe(t => {
this.setFormData();
});
}
private setFormData() {
...
this.subscription.unsubscribe();
}
Ou vous pouvez utiliser Subject pour compléter l’observable via l’opérateur takeUntil()
:
this.subject = new Subject();
ngOnInit() {
timer(100, 100).pipe(
takeUntil(this.subject),
).subscribe(t => this.setFormData());
}
private setFormData() {
...
this.subject.next();
}
Jetez un coup d'oeil à ceux-ci aussi:
Jan 2019: Mise à jour pour RxJS 6
vous pouvez utiliser la méthode unsubscribe
lorsque vous souhaitez arrêter le chronomètre observable comme ceci
this.timer = Observable.timer(100, 100);
this.subscription = this.timer.subscribe(t => {
this.setFormData();
});
.............
this.subscription.unsubscribe();
Une nuance que les réponses précédentes n’ont pas vraiment abordée est qu’il n’est pas nécessaire d’arrêter un minuteur/intervalle observable - du moins pas en interagissant avec l’observable ou le minuteur lui-même.
Je me suis retrouvé ici parce que je configurais un observable à l'aide d'une minuterie dans la méthode de démarrage d'un serveur HostedService et que, dans la méthode d'arrêt, il semblait comme si je devais l'arrêter ou me débarrasser de quelque chose? - et bien non. La minuterie observable n'a pas besoin d'être arrêtée ou éliminée de cette manière, mais uniquement les abonnements, et c'est pourquoi ...
Les temporisateurs et les intervalles observables sont des exemples de flux froids (bien qu'ils semblent se comporter comme chaud). Ils sont passifs et non actifs, ils ne produisent pas de données tant qu’ils ne sont pas abonnés et cessent de produire des données sans abonnés. Par conséquent, la suppression de tous les abonnements devrait suffire à empêcher le chronomètre de produire des données.
Plus d'infos ici ... [ http://introtorx.com/Content/v1.0.10621.0/14_HotAndColdObservables.html]