2017-05-18 14 views
7

ja realizację następujących funkcji w składniku Angular2 za:Jak zatrzymać observable.timer w 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; 
    } 
} 

Chcę zatrzymać powtórki Observable.timer gdy wartość jest prawidłowo przechowywany z setFormData().

Ale nie wiem jak, proszę powiedz mi.

+0

Więc chcesz zatrzymać to po wykonaniu raz? Czy też czekasz, aby dane "this.authStore.registerInfo" zostały gdzieś ustawione, więc musisz wywoływać 'setFormData', dopóki dane nie nadejdą? – Saravana

+0

Jeśli wiesz, ile czasu potrzeba na odebranie danych, dlaczego nie użyjesz operatora takiego jak opóźnienie. – Nugu

+0

To nie jest dobry pomysł, aby to zrobić. Jeśli podasz więcej informacji o tym, co próbujesz osiągnąć, być może moglibyśmy wskazać inny kierunek, aby poradzić sobie z twoim problemem. – Maxime

Odpowiedz

16

Są tam są zasadniczo dwa sposoby:

  • połączeń unsubscribe() na przedmiot subskrypcji wrócił z rozmowy subscribe() .
  • użyć operatora

po prostu unsubscribe można zrobić to w ten sposób.

ngOnInit() { 
    this.timer = Observable.timer(100, 100); 
    this.subscription = this.timer.subscribe(t => { 
     this.setFormData(); 
    }); 
} 

private setFormData() { 
    ... 
    this.subscription.unsubscribe(); 
} 

Albo można użyć zastrzeżeniem zakończenia obserwowalnym przez takeUntil() operatora:

this.subject = new Subject(); 

ngOnInit() { 
    this.timer = Observable.timer(100, 100); 
    this.timer 
     .takeUntil(this.subject) 
     .subscribe(t => { 
      this.setFormData(); 
     }); 
} 

private setFormData() { 
    ... 
    this.subject.next(); 
} 

mają wyglądać te, a także:

2

można użyć unsubscribe metodę, jeśli chcesz, aby zatrzymać stoper zaobserwowania takiego

this.timer = Observable.timer(100, 100); 
this.subscription = this.timer.subscribe(t => { 
    this.setFormData(); 
}); 

............. 
this.subscription.unsubscribe(); 
+0

Dlaczego tak wiele pochlebstw? czy ta odpowiedź jest błędna? nawet odpowiedź @martin o tym samym kodzie co napisałem –

+0

Tak. 'unsubscribe' jest wywoływane w' Subscription', a nie 'Observable'. – cartant

+0

okii, ale odpowiedź nie dostarcza żadnych złych informacji, prawda? po wszystkim musisz użyć metody wypisania się, prawda? niż dlaczego przegrał? –