角度6:如何退订rsjx间隔或计时器?

时间:2018-08-14 16:12:50

标签: typescript angular6

我认为问题很明确。我找不到有关如何退订rsjx之类的interval or timer操作的信息吗?

我的组件:

public intervallTimer = interval(5000);

ngOnInit() {
  this.getValues();
  this.intervallTimer.subscribe(() => this.getValues());
}

// What I like to do is something like this, but "unsubscribe()" that's no function
somefunction(){
  this.intervallTimer.unsubscribe()
}

2 个答案:

答案 0 :(得分:1)

或者您可以使用takeWhile(Boolean)来控制行为

this.intervallTimer.pipe(
      takeWhile(// your condition)
).subscribe(() => this.getValues()); 

您可以从here

中找到文档

答案 1 :(得分:0)

subscribe返回一个以Subscription作为方法的unsubscribe对象。您可以选择的一种方法是:

public intervallTimer = interval(5000);
private subscription;

ngOnInit() {
  this.getValues();
  this.subscription = this.intervallTimer.subscribe(() => this.getValues());
}

somefunction(){
  this.subscription.unsubscribe()
}

这要求您明确取消订阅,而您可能不想这样做。您也可以考虑使用takeUntil,它返回complete Observable,这将导致自动unsubscribe。只需确保takeUntilthe last in any chain

public intervallTimer = interval(5000);
private alive = true;

ngOnInit() {
  this.getValues();
  this.intervallTimer.pipe(takeUntil(() => !this.alive)).subscribe(() => this.getValues());
}

somefunction(){
  this.alive = false;
}