Как остановить наблюдаемый .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();