J'ai deux fonctions où j'ai besoin de souscrire à un observable dans le premier et de me désabonner à la seconde. Mais dans mon code, je ne peux pas accéder à l'observable de la deuxième fonction car ce n'est pas dans sa portée.
Voici mes fonctions: P>
start() {
this.max = this.duration;
const interval = Observable.interval(this.selectedSprint.duration);
interval
.takeWhile(_ => !this.isFinished)
.do(i => this.current += 1)
.subscribe();
}
stop() {
// here I need to unsybscribe to the observable
this.dialogService.openConfirmDialog('do you want to stop ?')
.afterClosed().subscribe((result: boolean) => {
if (result) {
// if true logic
}
});
}
3 Réponses :
Enregistrez une référence à votre abonnement dans votre classe avec De cette façon, vous êtes Cann Cal this.sub = intervalle [...]. S'abonner () Code>. p>
this.sub.subscribe () code> dans votre deuxième fonction. P>
Une solution consiste à stocker l'abonnement dans votre composant.
export class Component {
intervalSub$: Subscription;
intervalObs: Observable<number>;
start() {
this.max = this.duration;
this.intervalObs$ = Observable.interval(this.selectedSprint.duration)
.takeWhile(_ => !this.isFinished)
.do(i => this.current += 1);
this.intervalSub$ = intervalObs.subscribe();
}
stop() {
// here I need to unsybscribe to the observable
this.dialogService.openConfirmDialog('do you want to stop ?')
.afterClosed().subscribe((result: boolean) => {
if (result) {
this.intervalSub$.unsubscribe();
}
});
}
/**
* If you unsubscribed from the interval and you want to resume
* (If this.isFinished is true, it won't do a thing)
*/
resume() {
this.intervalObs.subscribe();
}
}
J'ai essayé cette solution mais je continue à obtenir ceci: tapez 'Observable
Vous devez avoir assigné votre champ d'intervalle $ juste après votre do () code>, qui est observable. Pour pouvoir vous désabonner, vous devez attribuer le résultat de votre S'abonner () Code> dans ce champ.
Une seule question, puis-je y souscrire à nouveau après la désabonnement? Si (! Résultat)
Oui, mais pour le faire, vous auriez besoin de stocker l'abonnement et l'observable => Vous pouvez souscrire à un observable et à vous désabonner d'un abonnement.
Ok, merci, pouvez-vous me montrer un exemple de cela?
Merci beaucoup
Si vous êtes dans une classe, vous pouvez conserver l'objet code> code>, renvoyé par l'appel sur .Subscribe () code>, en tant que propriété. stop() {
this.intervalSubscription.unsubscribe(...);
}