Как остановить наблюдаемый .timer в Angular2
Я реализую следующие функции в Angular2 Component:
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;
}
}
Я хочу остановить повторение Observable.timer
после правильного сохранения значения с помощью setFormData()
.
Но не знаю, как, пожалуйста, скажите мне.
Ответы
Ответ 1
Есть два основных способа:
- вызовите
unsubscribe()
для объекта Subscription, возвращенного из вызова subscribe()
. - использовать оператор
Чтобы просто unsubscribe
вы можете сделать это так.
ngOnInit() {
this.subscription = timer(100, 100).subscribe(t => {
this.setFormData();
});
}
private setFormData() {
...
this.subscription.unsubscribe();
}
Или вы можете использовать Subject для завершения Observable с помощью оператора takeUntil()
:
this.subject = new Subject();
ngOnInit() {
timer(100, 100).pipe(
takeUntil(this.subject),
).subscribe(t => this.setFormData());
}
private setFormData() {
...
this.subject.next();
}
Посмотрите также:
Январь 2019: обновлено для RxJS 6
Ответ 2
вы можете использовать метод unsubscribe
, когда вы хотите остановить наблюдаемый таймер следующим образом
this.timer = Observable.timer(100, 100);
this.subscription = this.timer.subscribe(t => {
this.setFormData();
});
.............
this.subscription.unsubscribe();