2

サービスから定期的に値をリクエストするAngularコンポーネントがあります。

setInterval(() => {
      this.updateValues();
    }, 1000);


updateValues(): void {
  if (this.isValuesUpdateRunning === false) {
    this.isValuesUpdateRunning = true;
    this.apiService.getCurrentValues().subscribe((data: any) => {
      if (data != null) {
        this.currentValues = data;
        this.isValuesUpdateRunning = false;
      }
    });
  }
}

これを行うことで多くのサブスクリプションを開くので、どこかでサービスのサブスクリプションを解除する必要があると確信しています。非同期パイプの使用を考えていましたが、「isValueUpdateRunning」変数を設定する必要があり、テンプレート内で非同期を使用しただけでは不可能です。

また、Angular が提供する「onDestroy」メソッド内での登録解除も役に立ちません。これは、私が理解している限り、このメソッドはページを離れたときにのみ呼び出されるためです。しかし、何千ものサブスクリプションが開いたままになるのを防ぐために、サブスクリプションをより頻繁に閉じる必要があります。

また、値を設定した直後にサブスクリプションを閉じようとしましたが、ビュー内で値を取得できません:

updateValues(): void {
  if (this.isValuesUpdateRunning === false) {
    this.isValuesUpdateRunning = true;
    const sub = this.apiService.getCurrentValues().subscribe((data: any) => {
      if (data != null) {
        this.currentValues = data;
        this.isValuesUpdateRunning = false;
      }
    });
    // closing the subscription right here:
    sub.unsubscribe();
  }
}

助けていただけますか?私はアイデアが不足しています。

4

3 に答える 3